Laravel Passport CreateFreshApiToken начальный вход и рабочий процесс

У меня есть интерфейс командной строки Vue, поэтому я пытаюсь использовать Laravel Passport для обработки запросов аутентификации.

https://laravel.com/docs/5.7/passport#consuming-your-api-with-javascript

У меня есть api/login маршрут, который выполняет следующие действия ( почти скопировано и вставлено отсюда):

public function login(){ 
  if(Auth::attempt(['email' => request('email'), 'password' => request('password')])){ 
    $user = Auth::user(); 
    $success['token'] =  $user->createToken('MyApp')->accessToken; 
    return response()->json(['user' => $user], $this->successStatus);
  } 
  else{ 
    return response()->json(['error'=>'Unauthorised'], 401); 
  } 
}

После того, как я попал в него с запросом AJAX, пользователь успешно вошел в систему.

Но если я сделаю что-то подобное в своем действии Vue:

login({commit, dispatch}, {email, password}){
  axios.post('/api/login', {
    email, password 
  }).then( response => {
    console.log("Check login was successful", response.data);
    commit('setUser', response.data);
    axios.get("/api/user").then(response => {
      console.log("Still logged in:", response);
    });
  });

На консоли написано следующее:

Check login was successful {user: {…}}
GET http://localhost:8080/api/user 401 (Unauthorized)

Документы Laravel говорят, что ...

Это промежуточное ПО Passport будет прикреплять файл cookie laravel_token к вашим исходящим ответам.

Что я делаю не так / как мне получить доступ к этому laravel_token для будущих запросов?


person Djave    schedule 09.02.2019    source источник


Ответы (1)


Я решил это, выполнив следующие действия.

Я уже создавал accessToken и никогда не отправлял его обратно. Итак, шаг 1:

if(Auth::attempt(['email' => request('email'), 'password' => request('password')])){ 
  $user = Auth::user(); 
  $accessToken =  $user->createToken('MyApp')->accessToken; 
  return response()->json(compact('user','accessToken'), $this->successStatus);
} 

Затем в моем запросе Axios:

axios.post('/api/login', {
    email, password 
  }).then( response => {
    // Send the auth token every time : )
    axios.defaults.headers.common['Authorization'] = "Bearer " + response.data.accessToken;
    commit('setUser', response.data.user);
  });
person Djave    schedule 10.02.2019