所以我在我的 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('/')
还是同样的问题
终于解决了这个问题。我的主键是从外部 API 检索的自定义 uuid。我将主要 ley 恢复为默认 ley($table->increments('id');
并且它起作用了。
我查了一下,结果发现我可以在我的用户模型中做public $incrementing = false;
它会阻止Laravel认为这是一个递增的领域,这可能已经解决了它,但我还没有测试过。