所以我在laravel网站上有一个自定义登录流程。 Ther用户位于可通过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('/')
仍然是同一个问题
答案 0 :(得分:0)
终于解决了这个问题。我的主键是从我的外部api检索到的自定义uuid。我将主要的ley恢复为默认值($table->increments('id');
并且它有效。
我looked it up,事实证明我可以完成public $incrementing = false;
我的用户模型,它会阻止Laravel认为它是一个递增的字段,这可能已经解决了,但我没有测试过。