如何解决401未经授权,同时使用具有api令牌身份验证的laravel Sanctum获取用户
我观看了this tutorial的laravel sanctum进行api令牌认证。登录时,我检索一个Bearer令牌,该令牌已添加到axios标头中。但是,当尝试通过/ api / user获取用户时,我得到401。请注意,由于我使用的是Sanctum Api Token Authentication而不是SPA身份验证,因此我不使用CSRF令牌。
我有一个看起来像所有axios请求的api文件
new Thread(new Runnable() {
public void run() {
String[] params = { "open","/System/Applications/Utilities/Terminal.app" };
try {
new ProcessBuilder(params).start();
} catch (IOException e) {
e.printStackTrace();
}
}
}).start();
某些身份验证功能
let axiosInstance = axios.create({
baseURL: 'http://some-url.local/api',})
let api = function () {
let token = localStorage.getItem('token');
if (token) {
axiosInstance.defaults.headers.common['Authorization'] = `Bearer ${token}`;
}
return axiosInstance;
}
export { api }
LoginController
import {
api
} from 'boot/axios'
export default {
register(form){
return api().post('/register',form)
},login(form) {
return api().post('/login',logout(){
return api().post('/logout')
},auth(){
return api().get('/user')
}
}
routes / api.php中的路由
class LoginController extends Controller{
public function login(Request $request){
$this->validate($request,[
'email' => 'required|email','password' => 'required','deviceName' => 'required'
]);
$user = User::where('email',$request->email)->first();
if (!$user || !Hash::check($request->password,$user->password)) {
throw ValidationException::withMessages([
'email' => ['The provided credentials are incorrect.'],]);
}
return $user->createToken($request->deviceName)->plainTextToken;
}
public function logout(Request $request)
{
$request->user()->tokens()->delete();
return response()->json('logout successful',201);
}
}
我在用户模型中使用HasApiToken,在config / sanctum.php中具有'prefix'=>'api',在config / cors.php中具有'paths'=> ['api / *']并具有'api' => ['driver'=>'sanctum',...]在我的config / auth.php中
我观看了该教程两次,并复制了完全相同的内容(除了我使用的是Quasar框架),在整个google和stackoverflow中进行了搜索...我不明白,请帮忙!我确实收到了Bearer令牌,因此该应用程序认为我已登录,但无法获取用户数据。在上述教程的第1部分中,已完成相同的操作,但是使用SPA身份验证(csrf),并且该功能确实有效!
更新
似乎它可以在http://127.0.0.1:8000/上使用php artisan服务,但不能在http://some-domain.local或公共领域上使用MAMP。
为什么...
解决方法
在您的.env
文件中进行设置。在我的情况下,端口为8000
SESSION_DRIVER=cookie
SESSION_DOMAIN=localhost
SANCTUM_STATEFUL_DOMAINS=localhost:8000
,
已解决!
对于任何其他有此问题的人: 看来我的Bearer令牌由于某种原因而从laravel端点上的请求中删除了(我仍然不知道为什么)。
向axios添加自定义标头(X-Authorization),并使用固定的中间件解决服务器端!更多信息here
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。