Laravel 圣所错误 {"message":"未经身份验证。"}

时间:2021-01-24 05:05:40

标签: laravel

我正在尝试使用 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."}

1 个答案:

答案 0 :(得分:0)

您的电子邮件输入字段中缺少 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">