【发布时间】:2020-01-24 06:19:45
【问题描述】:
如何解决特定单个 URL 的 Laravel 401(未经授权)错误。
url 可以直接访问,但是当使用 axios 发送请求时,会出现这个错误。
【问题讨论】:
-
显示控制器和中间件的代码。这也是一个api吗?
-
您的身份验证如何工作?饼干会议? jwt ?
标签: laravel axios unauthorized
如何解决特定单个 URL 的 Laravel 401(未经授权)错误。
url 可以直接访问,但是当使用 axios 发送请求时,会出现这个错误。
【问题讨论】:
标签: laravel axios unauthorized
api_token: this.user.api_token
axios.post("http://foo",
{headers: { 'Authorization' : 'Bearer '+ api_token}})
.then(response => {
//action
})
链接:https://forum.vuejs.org/t/401-unauthorized-vuejs-laravel-and-passport/59770
或
postComment() {
axios.post('/api/posts/'+this.post.id+'/comment', {
api_token: this.user.api_token,
body: this.commentBox
})
但请确保您拥有“user.api_token”
【讨论】:
有些人只是假设所有的配置都是开箱即用的;但你需要:
按照这个 Laravel 文档为您的所有用户获取 api_token。 Laravel api authentication
注意:注册用户时,如果数据库中的用户api_token仍然保存为NULL,则进入用户模型,将api_token添加到可填充数组中
//Model/User.php
protected $fillable = [
...
'api_token',
...
];
在您的视图布局中app.blade.php 为您的令牌创建一个元,就像您的csrf:
//views/layout/app.blade.php
<!-- APIToken -->
<meta name="api_token" content="{{ Auth::user()->api_token }}">
终于在你的main.js或app.js;您可以将其包含在每个发送的请求中
//resources/app.js
window.axios.defaults.headers.common = {
'X-CSRF-TOKEN': document.querySelector('meta[name="csrf-token"]').getAttribute('content'),
'Authorization': 'Bearer '+ document.querySelector('meta[name="api_token"]').getAttribute('content'),
'X-Requested-With': 'XMLHttpRequest'
};
这很有效,并且在我经历过之后会对某人有所帮助;同时 Laravel Passport 和 Sanctum 是更好的 api 认证推荐
【讨论】: