laravel user api_token未定义

时间:2018-05-01 11:17:06

标签: json laravel vue.js token axios

我在尝试使用'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

    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 :(得分:0)

如果您尝试从vuejs使用自己的api,则无需手动设置api令牌。只需更新app/Http/Kernel.php中的Web中间件组即可包含以下行:

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

此中间件将附加一个laravel_token cookie,其中包含一个加密的JWT,Passport将使用该JWT来验证来自JavaScript应用程序的API请求。

在此处阅读更多内容:https://laravel.com/docs/5.6/passport#personal-access-tokens

但是,如果您从外部源(如移动应用程序)使用此相同的api,则护照将需要api令牌来验证请求。可以在用户登录或注册时创建令牌。以下是:

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

然后在向api

发出请求时将头对象添加到axios
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