我需要通过Auth在Laravel 5.7中手动登录用户。运行Auth :: loginUsingId($ userId,true)之后,我将用户重新定位到他的“帐户”页面。
这样做的目的是使通过令牌访问的用户可以登录网站,而无需再次添加其凭据。
我已经尝试了所有可以在网上找到的东西,包括将Session从MiddlewareGroup移到Middleware,检查Cookie的名称以及其他一些无效的方法。
我的控制器看起来像这样:
public function loginExternal(Request $request) {
$userId = $request->uid;
Auth::loginUsingId($userId, true);
redirect()->to('/account')->send();
}
其路线非常简单:
Route::get('/oneclick/{token}', 'Auth\AccountController@loginExternal')->middleware('signed')->name('oneclick');
我希望用户能够登录并自动进入其帐户。现在,它会将我发送到登录页面。
我注意到的是,loginUsingId()方法仅在此控制器中生成一个新的会话ID,但是在网站的其他页面中,该网站正在使用不同的会话,即同一会话(应该发生)。>
我需要提及的是,用户确实已通过LoginExternal方法登录。它只是不会持续到帐户页面。
有什么想法吗?
答案 0 :(得分:0)
在控制器中:
public function loginExternal($id) {
$user = User::find($id);
if($user){
\Auth::loginUsingId($id, true);
return redirect('/account');
} else {
return redirect('/')->with('error_message', 'No user found!');
}
}
在路由文件(web.php)
Route::get('/oneclick/{id}', 'Auth\AccountController@loginExternal')->name('oneclick');