LARAVEL & VUE: Как я могу получить API_TOKEN вошедшего в систему пользователя с запросом API? - PullRequest
1 голос
/ 14 июня 2019

У меня есть SPA с использованием VUE и LARAVEL 5.8. Я настроил API_TOKEN, связанный с вошедшим в систему пользователем.Все отлично работает сразу после входа в систему.Я получаю API_TOKEN, сохраняю его в var и отправляю вместе с запросом Axios.В Laravel у меня есть промежуточное программное обеспечение, которое заботится о токене и сравнивает его с одной установкой вошедшего в систему пользователя.

проблема возникает, когда истекает сеанс.Потому что я все еще могу перемещаться по частным страницам и делать запросы API для сохранения и удаления контента.Это возможно, я думаю, потому что у меня все еще есть тот же API_TOKEN, сохраненный в var, и промежуточное программное обеспечение, очевидно, не получает истечения сеанса.

Так что я хочу получать API_TOKEN каждый раз, когда я делаюAjax, запросите по истечении сеанса, я не получу токен и, следовательно, не смогу завершить запрос.

Это мои настройки.

web.php, где у меня есть единственный php-маршрут, который указывает на singlePageController:

Auth::routes();

Route::get('/{any}', 'SinglePageController@index')->where('any', '.*');

Затем в singlePageController я возвращаю вид:

class SinglePageController extends Controller
    {
        public function index() {
        return view('app', ['loggedUser' => auth()->user()]);
    }
}

Тогда у меня есть api.php, где у меня есть маршруты API.Как вы видите в конце, у меня есть промежуточное программное обеспечение, чтобы сделать его приватным.Просто для примера, это тот, который я использую для обновления контента:

Route::put('event/update/{slug}', 'EventController@update')->middleware('auth:api');

Затем соответствующий контроллер этого маршрута API:

public function update(Request $request, $slug)
{
    $event = Event::where('slug', $slug)->first();

    $event->title = $request->input('title');

    return new EventResource($event);
 }

И в конце этоРесурс, который я использую, чтобы определить, что и как будут отображаться данные API:

public function toArray($request)
{
    // return parent::toArray($request);

    return [
        'id' => $this->id,
        'title' => $this->title,
        'slug' => $this->slug,
        'curator' => $this->curator,
        'featured_image' => $this->featured_image,
        'body' => $this->body,
        'date' => $this->date
    ];
 }

Так что это выше, у меня есть поток.Затем, когда я выполняю вызов axios для обновления содержимого, я делаю что-то вроде:

    axios({
            method: 'PUT',
            url: '/api/event/update/' + this.$route.params.slug + '?api_token=' + this.isLogged.apiToken,
            data: dataToSave,
            headers: {
                'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
            }
        })  
        .then((response) => {
            this.getNotification('Success: The Event has been saved');
        })
        .catch((error) => {
            this.getNotification('Error: Impossible saving the event');
            console.log(error);
        })

Знаете ли вы, как это сделать?или есть ли лучший способ сделать это?

1 Ответ

0 голосов
/ 14 июня 2019

вам и нравится, ваш метод входа должен понравиться.

  public function login(Request $request)
    {

        if (Auth::attempt(['email' => $request['email'], 'password' => $request['password']])) {
            $user = Auth::user();
            $success = $user->createToken(config('app.name'))->accessToken;
            return response()->json(["token" => $success, 'status' => 200]);
        } else {
            return response()->json(['message' => "Email or Password do not match"], 401);
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...