基本上我正试图通过电子邮件发送一个链接,让您使用特定帐户登录,然后将您重定向到页面。
我可以使用以下代码成功生成链接并使用laravel中的URL功能通过电子邮件发送它们:
生成链接:
$url = "some/page/".$travel_id;
$link = URL::temporarySignedRoute(
'autologin', now()->addDay(), [
'user_id' => 3,
'url_redirect' => $url,
]
);
并发送邮件:
Mail::send('emails.travel', $data, function ($message) use ($data) {
$message->from('[email protected]', 'blablabla');
$message->to('[email protected]', 'blablabla')->subject('test');
});
有一条路由捕获通过邮件发送的链接,该链接应该与用户一起登录(在这种情况下,id为'3'的那个)并将您重定向到某个页面,但是当它重定向时,它会提示您登录页面,就像您没有登录一样。
这是路线:
Route::get('/autologin', function (Request $request) {
$user = User::findOrFail($request->user_id);
if (! $request->hasValidSignature()) {
abort(403);
}
Auth::login($user);
return redirect($request->input('url_redirect'));
})->name('autologin');
当我尝试在Auth::check()
之后做一个Auth::login($user);
它返回true,那么用户登录了吗?
我也尝试使用Auth::loginUsingId($request->user_id);
没有不同的结果。
知道发生了什么事吗?
所以我发现了问题,
我正在使用背包用户登录,但我正在使用laravel的默认身份验证功能。
结果我需要使用:backpack_auth()->login($user);
而不是Auth::login($user);
如果我想使用背包用户登录。
也使用backpack_auth()->check()
而不是Auth::check()
。