关于 API 登陆不产生 token 的问题

直接说问题吧,项目前台没有注册功能,都是用laravel-admin创建用户,密码使用bcrypt()方法创建,API采用JWT令牌模式,手机端使用手机号码和密码登陆。
这是我的auth.php

'guards' => [
    'web' => [
        'driver' => 'session',
        'provider' => 'users',
    ],

    'api' => [
        'driver' => 'jwt',
        'provider' => 'jwt',
    ],
],

...
'providers' => [
    'users' => [
        'driver' => 'eloquent',
        'model' => App\Models\User::class,
    ],
    'jwt' => [
        'driver' => 'eloquent',
        'model' => App\Models\Driver::class,
    ],
],

这是我的model

namespace App\Models;

use Tymon\JWTAuth\Contracts\JWTSubject;
use Illuminate\Foundation\Auth\User as Authenticatable;

class Driver extends Authenticatable implements JWTSubject
{
    protected $table = 'drivers';

    protected $fillable = [
        'phone','password'
    ];

    public function getJWTIdentifier()
    {
        return $this->getKey();
    }

    public function getJWTCustomClaims()
    {
        return [];
    }
}

这是我的controller

namespace App\Http\Controllers\Api;

use App\Http\Controllers\Controller;
use App\Http\Requests\Api\DriverLoginRequest;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Hash;

class DriversController extends Controller
{
    public function login(DriverLoginRequest $request){
        $credentials = $request->only('phone','password');
        if (!$token = Auth::guard('api')->attempt($credentials)) {
            throw new \Exception('用户名或密码错误');
        }
        return response()->json([
            'access_token' => $token,
            'token_type' => 'Bearer',
            'expires_in' => Auth::guard('api')->factory()->getTTL() * 60
        ])->setStatusCode(201);
    }

}

这是我的request

namespace App\Http\Requests\Api;

use Illuminate\Foundation\Http\FormRequest;

class DriverLoginRequest extends FormRequest
{
    /**
     * Determine if the user is authorized to make this request.
     *
     * @return bool
     */
    public function authorize()
    {
        return true;
    }

    /**
     * Get the validation rules that apply to the request.
     *
     * @return array
     */
    public function rules()
    {
        return [
            'phone' => [
                'required',
                'regex:/^((13[0-9])|(14[5,7])|(15[0-3,5-9])|(17[0,3,5-8])|(18[0-9])|166|198|199)\d{8}$/',
            ],
            'password' => [
                'required',
                'min:8'
            ],
        ];
    }
}

我后台的这个用户的密码就是12345678,但是不管我怎么弄,就是不产生token。请各位无比帅气的大佬教我一二,感谢🙏

《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
最佳答案

在控制器 dd() 一下看是否拿到了数据

换成官方文档的方法试试:

$token = auth()->attempt($credentials)

记得在 auth.php 将默认守卫换成 api

4年前 评论
讨论数量: 4

有没有大佬帮忙解答一下啊

4年前 评论

数据库里,用户的密码发出来看下

4年前 评论

@likunyan

密码 $2y$10$Mj0KNg0vnlN8f2ZQ9Ie/QOlxcf2C3K9uzXqg.EKDFW/75NhsZjJcK

数据库里的密码每次生成的都不一样,登录的话应该怎么对比才能通过呢?

4年前 评论
小李世界 4年前
qingningba (作者) (楼主) 4年前
blankqwq 3年前

在控制器 dd() 一下看是否拿到了数据

换成官方文档的方法试试:

$token = auth()->attempt($credentials)

记得在 auth.php 将默认守卫换成 api

4年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!