Laravel 5.3 Auth Facade正在更改为默认的经过身份验证的用户

时间:2017-07-21 09:17:40

标签: php laravel authentication

所以我在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('/')

仍然是同一个问题

1 个答案:

答案 0 :(得分:0)

终于解决了这个问题。我的主键是从我的外部api检索到的自定义uuid。我将主要的ley恢复为默认值($table->increments('id');并且它有效。

looked it up,事实证明我可以完成public $incrementing = false;我的用户模型,它会阻止Laravel认为它是一个递增的字段,这可能已经解决了,但我没有测试过。