Laravel 7 手动身份验证会话问题
Posted
技术标签:
【中文标题】Laravel 7 手动身份验证会话问题【英文标题】:Laravel 7 manual authentication session issue 【发布时间】:2020-09-01 17:42:49 【问题描述】:TL;DR:在成功登录并重定向到/home
后,我被Controller的中间件($this->middleware('auth');
)踢回/login
。
我有一个php-apache docker 开发环境。最后,我能够将 Laravel 7 用于新服务,因此我设置了它,获取了框架并开始使用它。我不能使用 Laravel 的散列算法,因为我有一个自定义方法,我知道可以与 Auth::attempt()
方法一起使用 manual authentication。
都设置这个点
public function login(Request $r)
$data = $r->validate([
'username' => 'required|string',
'_pswrd' => 'required|string',
]);
$credentials = [
'login' => $data['username'],
'password' => $data['_pswrd'],
'status' => 'A',
];
try
if (Auth::guard()->attempt($credentials, $r->has('remember')))
// Auth::user() is found and valid so redirect...
return $r->wantsJson()
? new Response('', 204)
: redirect()->intended('/');
return back()->with('errors', new MessageBag([ 'auth.failed' ]));
catch (Exception $e)
Log::warning($e);
return back()->with('errors', new MessageBag([ 'auth.unknown' ]));
但是,那我去home
路线
class HomeController extends Controller
public function __construct()
// \Illuminate\Support\Facades\Auth::user() === null
$this->middleware('auth');
public function index()
return view('home');
为什么 HomeController 中的 Auth::user() 为空?
为什么我的会话丢失了?
我是否缺少 Apache 或 laravel 的 conf/
文件夹中的某些配置?
【问题讨论】:
【参考方案1】:守卫叫什么名字?是为了web
守卫吗?
因此,尝试填写guard('web')
或直接删除它,直接Auth::attempt([])
【讨论】:
【参考方案2】:这是一种没有检查明显的问题。 Laravel 改变了(很多)用户的模型,我想稍后再看。必须修复 primary_key
和 keyType
属性才能使中间件正常工作。
我会留下这个答案,因为我在这个问题上花了很多时间,总是认为它与身份验证或会话配置有关,但实际上并非如此。
【讨论】:
以上是关于Laravel 7 手动身份验证会话问题的主要内容,如果未能解决你的问题,请参考以下文章
在 laravel 5.2 中使用默认身份验证路由对用户进行身份验证后设置会话数据