【问题标题】:Laravel sanctum error {"message":"Unauthenticated."}Laravel sanctum 错误 {"message":"Unauthenticated."}
【发布时间】:2021-01-24 05:05:40
【问题描述】:

我正在尝试使用 sanctum 包在我的 laravel 项目中设置身份验证部分。

这是我在 LoginController 上的登录代码

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Models\User;
use Auth;
use Illuminate\Support\Facades\Validator;
// use Response;

class LoginController extends Controller
{
    //
    public function login(Request $request){
        $validator = Validator::make($request->all(), [
            'email' => ['required', 'string', 'email', 'max:255', 'unique:users'],
            'password' => ['required', 'string', 'min:8', 'confirmed'],
        ]);

        if($validator->fails()){
            return response()->json(['status_code'=>400, 'message'=>'Bad request']);
        }

        $credentials = request(['email', 'password']);

        if(!Auth::attempt($credentials)){
            return response()->json(['status_code'=>500, 'message'=>'Unauthorized']);
        }

        $user = User::where('email', $request->email)->first();
        $tokenResults = $user->createToken('authToken')->plainTextToken;
        return response()->json(['status_code'=>200, 'token'=>$tokenResults]);
    }

    public function logout(Request $request){
        $request->user()->currentAccessToken()->delete();
        return response()->json(['status_code'=>200, 'message'=>'Token deleted successfully']);
    }
}

我在 login.vue 上的 vlogin 表单是这样的:

<template>
     <div class="flex flex-wrap w-full justify-center items-center pt-56">
        <div class="flex flex-wrap max-w-xl">
            <div class="p-2 text-2xl text-gray-800 font-semibold"><h1>Login to your account</h1></div>
            <div class="p-2 w-full">
                <label for="email">Your e-mail</label>
                <input class="w-full bg-gray-100 rounded border border-gray-400 focus:outline-none focus:border-indigo-500 text-base px-4 py-2" placeholder="Email" type="email" v-model="form.email">
            </div>
            <div class="p-2 w-full">
                <label for="password">Password</label>
                <input class="w-full bg-gray-100 rounded border border-gray-400 focus:outline-none focus:border-indigo-500 text-base px-4 py-2" placeholder="Password" type="password" v-model="form.password" name="password">
            </div>
            <div class="p-2 w-full mt-4">
                <button @click.prevent="loginUser" type="submit" class="flex text-white bg-indigo-500 border-0 py-2 px-8 focus:outline-none hover:bg-indigo-600 rounded text-lg">Login</button>
            </div>
        </div> 
    </div>
</template>
<script>
export default {
    data(){
        return{
            form:{
                email: '',
                password: ''
            },
            errors: []
        }
    },
    methods:{
         loginUser(){
             axios.post('/api/login', this.form).then(() =>{
                 this.$router.push({ name: "Dashboard"}); 
             }).catch((error) =>{
         this.errors = error.response.data.errors;
            })
         }
    }
}
</script>

而我在 api.php 上的路由是这样的:

Route::post('login', [LoginController::class, 'login']);

我在网络响应选项卡上收到此错误,所以谁能帮助我知道我做错了什么。

{"message":"Unauthenticated."}

【问题讨论】:

  • 你在做什么的时候遇到了这个错误?

标签: laravel


【解决方案1】:

您的电子邮件输入字段中缺少name="email"

<input class="w-full bg-gray-100 rounded border border-gray-400 focus:outline-none focus:border-indigo-500 text-base px-4 py-2" placeholder="Email" type="email" v-model="form.email" name="email">

【讨论】:

  • 我认为这不是问题所在,因为添加 name="email" 后我仍然收到相同的错误。
  • 可能是凭证数组? $request-&gt;only('email', 'password'); 试试看。
  • 你也可以直接输入凭证!Auth::attempt(['email' =&gt; $request-&gt;email, 'password' =&gt; $request-&gt;password])
  • 您是否尝试删除 !看看你是否仍然收到同样的通知?我知道它应该返回 false,但只是作为一种测试方法。
猜你喜欢
  • 2021-03-14
  • 2021-11-04
  • 2021-02-02
  • 2020-09-22
  • 2023-03-03
  • 2018-05-15
  • 1970-01-01
  • 2020-08-17
  • 2021-09-29
相关资源
最近更新 更多