Пользователь laravel api_token не определен - PullRequest
0 голосов
/ 01 мая 2018

Я получаю 'unauthorized' ошибку при попытке опубликовать новый комментарий с axios ..... я добавил (console.log(this.user.api_token);) как раз перед axios.post в postComment() метод. вывод: "undefined" !!!!!!!!!! Я учусь, и я не знаю много о API. но я не думаю, что пользователь api_token должен быть установлен вручную. или делает это ???

скрипт:

<script>

const app = new Vue({
  el: '#app',
  data: {
    comments: {},
    commentBox: '',
    post: {!! $post->toJson() !!},
    user: {!! Auth::check() ? Auth::user()->toJson() : 'null' !!}
  },
  mounted() {
    this.getComments();
  },
  methods: {
    getComments() {
      axios.get('/api/post/'+this.post.id)
            .then((response) => {
              this.comments = response.data
            })
            .catch(function (error) {
              console.log(error);
            });
    },
    postComment() {
        console.log(this.user.api_token);

      axios.post('/api/post/'+this.post.id , {
        api_token: this.user.api_token,
        body: this.commentBox
      })
      .then((response) => {
        this.comments.unshift(response.data);
        this.commentBox = '';
      })
      .catch((error) => {
        console.log(error);
      })
    }
  }
})

API-маршрут

    Route::get('/post/{post}', 'CommentController@index');
    Route::middleware('auth:api')->group(function () {
      Route::post('/post/{post}', 'CommentController@store');
     });

CommentController

public function index(Post $post){
  return response()->json($post->comments()->with('user')->get());
 }

public function store(Request $req,Post $post){
   $comment=$post->comment()->create([
       'user_id'=>auth::id(),
       'body'=>$req->body
   ]);
   $comment=Comment::where('id',$comment->id)->with('user')->first();
    return $comment->toJson;
}

1 Ответ

0 голосов
/ 01 мая 2018

Если вы пытаетесь использовать свой собственный API из vuejs, нет необходимости устанавливать токен API вручную. Просто обновите группу веб-промежуточного программного обеспечения в app/Http/Kernel.php, чтобы включить эту строку:

\Laravel\Passport\Http\Middleware\CreateFreshApiToken::class

Это промежуточное ПО будет прикреплять cookie-файл laravel_token, который содержит зашифрованный JWT, который Passport будет использовать для аутентификации запросов API из вашего приложения JavaScript.

Подробнее здесь: https://laravel.com/docs/5.6/passport#personal-access-tokens

Но, если вы используете тот же API-интерфейс из внешнего источника, такого как мобильное приложение, для аутентификации запроса по паспорту потребуется маркер API. Токен может быть создан, когда пользователь вошел в систему или зарегистрирован. Вот как это сделать:

//create a token $token = $user->createToken('Token Name')->accessToken;

Затем добавьте объект заголовков к axios при выполнении запроса к API

axios({
  method: 'method',
  url: 'url',
  headers: {
    'Accept' => 'application/json',
    'Authorization' => 'Bearer '.$token
  }
})
.then()
.catch()

Подробнее здесь: https://laravel.com/docs/5.6/passport#managing-personal-access-tokens

...