Laravel loginUsingId似乎不起作用

时间:2019-05-17 12:14:52

标签: php laravel login laravel-5.7

我需要通过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方法登录。它只是不会持续到帐户页面。

有什么想法吗?

1 个答案:

答案 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');
相关问题