Я пытаюсь разрешить пользователям входить на мой сайт, используя поток OAuth Twitch. Целая загрузка токена доступа и последующих пользовательских данных работает, но я также хочу сохранить некоторые пользовательские данные в своей базе данных, чтобы я мог назначать роли определенным людям. После успешной выборки пользовательских данных, я получил следующий код в HomeController
public function redirect(Request $request): RedirectResponse
{
// fetch data
$this->authService->authenticateUser($response, $this->userRepository);
return redirect()->route('index');
}
authenticateUser()
public function authenticateUser(array $response, UserRepositoryInterface $userRepository): void
{
$data = $response['content']->data[0];
$user = $userRepository->findByTwitchId($data->id);
if (!$user) {
$user = $userRepository->create($data);
}
Auth::login($user);
}
Две функции хранилища также довольно просты;
findByTwitchId()
public function findByTwitchId(string $twitchId): ?User
{
return User::where('twitch_id', $twitchId)->first();
}
create()
public function create($data): User
{
return User::create([
'twitch_id' => $data->id,
'login_name' => $data->login,
'display_name' => $data->display_name,
'email' => $data->email,
'profile_image' => $data->profile_image_url
]);
}
User
модель
class User extends Authenticatable
{
use Notifiable;
use HasRoles;
protected $guarded = [];
protected $keyType = 'string';
protected $primaryKey = 'twitch_id';
}
Все до Auth::login($user)
в authenticateUser
работает. Если пользователь уже существует, этот пользователь возвращается, в противном случае создается новый пользователь, и этот пользователь возвращается.
Однако я не могу заставить Auth::login($user)
работать с вновь созданным пользователем. Только когда пользователь проходит через поток входа во второй раз (например, когда пользователь уже был сохранен в базе данных), вход в систему работает. Что еще более странно, когда я добавляю dd(Auth::check())
ниже Auth::login()
, он возвращает true, но когда я впоследствии делаю ту же самую проверку в HomeController@index
(куда пользователь перенаправляется после входа в систему), он возвращает false.
Я, честно говоря, заблудился, почему он не работает.