我在尝试使用'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;
}
答案 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
发出请求时将头对象添加到axiosaxios({
method: 'method',
url: 'url',
headers: {
'Accept' => 'application/json',
'Authorization' => 'Bearer '.$token
}
})
.then()
.catch()
在此处阅读更多内容:https://laravel.com/docs/5.6/passport#managing-personal-access-tokens