使用 mongodb 时如何对 API 进行 Laravel 身份验证?

how to do Laravel authentication for API when using mongodb?

我使用 Laravel、Vue.js 和 MongoDB 创建了一个网络应用程序,我确实以这种方式登录,

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Hash;
use App\User;
use Illuminate\Support\Facades\Auth;

class AuthController extends Controller
{
    public function login(Request $request)
    {
        $this->validate($request, [
           'email' => 'required|email',
           'password' => 'required|between:6,25'
        ]);

        $user = User::where('email', $request->email)
             ->first();

        if($user && Hash::check($request->password, $user->password)) {
             // generate new api token
             $user->api_token = str_random(60);
             $user->save();

             Auth::login($user, $remember = true);

             return response()
             ->json([
                'authenticated' => true,
                'api_token' => $user->api_token,
                'user_id' => $user->_id,
                'name' => $user->name
             ]);
    }

    return response()
        ->json([
            'email' => ['Provided email and password does not match!']
        ], 422);
}

现在,当我尝试从其他控制器中的 Auth::user() 或 $request->user() 获取经过身份验证的用户时,我得到 null。我想我应该使用 token_api 从数据库中检索用户,但我认为这不安全。但是,我刚刚开始学习 Laravel 和 Vue.js 所以如果有更好的方法,我将不胜感激。

不确定,但我认为您没有以这种方式使用正确的授权 guard 驱动程序,守卫应该是 token 请检查配置文件夹中的 auth.php 文件并像下面这样设置在 guards 数组

   'api' => [
        'driver' => 'token',
        'provider' => 'users',
    ]

使用 Auth::guard('api')->user()Auth::guard('api')->login($user)

检查并设置此守卫的身份验证