php - Laravel Auth::user() 返回 null 除了登录功能
问题描述
我正在使用 Inertia.js 开发 Laravel 8 项目。在登录功能中,我可以使用 Auth::user() 来获取用户。但是,登录后,其他函数在 Auth::user() 中得到一个空值。我不确定出了什么问题。有人能帮我吗?
我认为 Laravel Auth 使用会话来识别当前用户,所以我尝试dd($request->session()->all());
在登录之前和之后列出会话。并且“_token”的会话值不会改变。
登录功能
public function handleProviderCallback(Request $request)
{
// user from socialite
$user = \Socialite::with('portal')->user();
// user here in database
$account = User::where('account', $user->id)->first();
if (!$account) {
User::create([
'account' => $user->id,
]);
$account = User::where('account', $user->id)->first();
}
Auth::login($account);
//dd(Auth::user());
return Inertia::render('Home/index');
}
为空的函数
public function getUser(Request $request)
{
dd(Auth::user());
return Auth::user();
}
以下是一些可能需要也可能不需要的信息。
网页.php
Route::get('/login', 'Auth\PortalLoginController@redirectToProvider')
->name('login');
Route::get('getUser', ['as' => 'getUser',
'uses' => 'Auth\PortalLoginController@getUser']);
Route::get('session', ['as' => 'session',
'uses' => 'Auth\PortalLoginController@listSession']);
授权文件
return [
'defaults' => [
'guard' => 'web',
'passwords' => 'users',
],
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'api' => [
'driver' => 'token',
'provider' => 'users',
'hash' => false,
],
],
'providers' => [
'users' => [
'driver' => 'eloquent',
'model' => App\Models\User::class,
],
],
'passwords' => [
'users' => [
'provider' => 'users',
'table' => 'password_resets',
'expire' => 60,
'throttle' => 60,
],
],
'password_timeout' => 10800,
];
解决方案
Laravel 需要auth
中间件来检查身份验证并初始化 Auth 服务。因此,您需要将auth
中间件添加到您要访问的所有路由中Auth::user()
所以更新你的路线routes/web.php
Route::get('/login', 'Auth\PortalLoginController@redirectToProvider')->name('login');
Route::get('getUser', ['as' => 'getUser', 'uses' => 'Auth\PortalLoginController@getUser'])->middleware('auth');
Route::get('session', ['as' => 'session', 'uses' => 'Auth\PortalLoginController@listSession'])->middleware('auth');
推荐阅读
- c# - System.Net.Http 的 .NET Framework 版本高于 Project
- python - 如何使用 python 加入多个 .wav 文件
- javascript - React on Submit 在控制台中显示没有数据
- scala - 使用编解码器限制大小字节后如何忽略编解码器
- keras - 出现错误:模型的输出张量必须是 Keras `Layer` 的输出
- c# - 特定数量字符的 C# 通配符
- java - how to use "chkdsk" with JPowershell?
- python - 删除括号之间的所有最后一个逗号
- asp.net-web-api - 通过另一个 api 传递信号器然后到网站
- electron - Electron-builder 如何将环境变量添加到我的 APP