【发布时间】:2017-12-27 06:41:45
【问题描述】:
所以我在我的 laravel 网站中有一个自定义登录流程。用户位于可通过 API 访问的外部数据存储中。流程基本上是这样的。 (缩小)
public function login(Request $request) {
$resultFromAPI = //call external API with email and password from $request
if($resultFromAPI) {
$user = User::find($resultFromAPI->user->user_id);
if($user) { //user exists
Auth::login($user);
//dump( Auth::user() );
return redirect('/');
} else {
$user = User::create([...]); //from $resultFromApi->user
Auth::login($user);
//dump( Auth::user() );
return redirect('/');
}
}
}
如果我尝试使用user2@example.com 登录,转储将显示该用户的对象。但是,我被重定向到 /、Auth::user() 的第二个将是 user1@example.com
我的本地数据库显示了这两个用户记录,但它默认为第一个用户。我正在使用默认注销功能来注销并清除会话,并且我已经确认在调用注销功能时Auth::user() 为空。我被卡住了。
编辑:我尝试了Auth::attempt(...) 而不是Auth::login(...),它没有改变任何东西
EDIT2:我从头开始使用全新安装的 laravel 5.4,将登录部分重写为这个
if ($this->attemptLogin($request)) {
$request->session()->regenerate();
$this->clearLoginAttempts($request);
return $this->sendLoginResponse($request);
}
而不是这个
Auth::login($user);
return redirect('/')
还是一样的问题
【问题讨论】:
-
你没有忘记一些测试代码,比如
Auth::loginUsingId($user_id, true);或类似的东西吗?? -
我跟踪了从调用
/login到重定向到/的流程,包括中间件。 (我在路由中使用了auth中间件)我什至在整个目录中搜索了Auth::,并没有发现任何异常。 -
假设电子邮件
user2@example.com的用户id = 2,尝试使用Auth::loginUsingId(2, true);而不在login方法中调用你的外部api,然后return redirect('/');看它是否会生成同样的问题!! -
还是同样的问题。用
user1@example.com重定向我。我尝试回显电子邮件(Auth::user()->email)并注释掉重定向功能,我得到了user2@example.com。
标签: php laravel authentication