关于 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。请各位无比帅气的大佬教我一二,感谢🙏
在控制器
dd()
一下看是否拿到了数据换成官方文档的方法试试:
记得在 auth.php 将默认守卫换成 api