在使用 Laravel 进行开发时,Auth::user()
方法用于获取当前已认证的用户实例。如果 Auth::user()
始终返回 null
,可能是由于以下几个原因:
确保你的路由或控制器使用了 auth
中间件。
Route::middleware(['auth'])->group(function () {
Route::get('/profile', function () {
return view('profile');
});
});
检查 config/session.php
文件中的配置,确保 Session 驱动设置正确,并且 Session 文件路径可写。
'driver' => env('SESSION_DRIVER', 'file'),
'files' => storage_path('framework/sessions'),
确保登录逻辑正确执行,并且用户信息成功保存到 Session 中。
use Illuminate\Support\Facades\Auth;
if (Auth::attempt(['email' => $email, 'password' => $password])) {
// 登录成功
return redirect()->intended('dashboard');
}
确保你的表单包含了 CSRF 令牌。
<form method="POST" action="/login">
@csrf
<!-- 其他字段 -->
</form>
确保你的用户模型继承了 Illuminate\Foundation\Auth\User
或实现了 Illuminate\Contracts\Auth\Authenticatable
接口。
use Illuminate\Foundation\Auth\User as Authenticatable;
class User extends Authenticatable
{
// 模型字段和方法
}
有时缓存可能导致问题,尝试清除缓存。
php artisan cache:clear
php artisan config:clear
php artisan route:clear
php artisan view:clear
以下是一个完整的登录控制器示例:
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\AuthenticatesUsers;
use Illuminate\Http\Request;
class LoginController extends Controller
{
use AuthenticatesUsers;
protected $redirectTo = '/home';
public function __construct()
{
$this->middleware('guest')->except('logout');
}
protected function validateLogin(Request $request)
{
$request->validate([
'email' => 'required|email',
'password' => 'required|min:6',
]);
}
protected function attemptLogin(Request $request)
{
return $this->guard()->attempt(
$this->credentials($request), $request->filled('remember')
);
}
}
Auth::user()
获取当前用户信息。通过以上步骤,你应该能够解决 Auth::user()
始终为空的问题。如果问题仍然存在,建议检查日志文件(storage/logs/laravel.log
)以获取更多详细信息。
领取专属 10元无门槛券
手把手带您无忧上云