Laravel 5.4多认证API问题:pemandu_bas令牌无法正常工作
我来帮你一步步排查Laravel 5.4里pemandu_bas多认证API的问题,从几个关键环节入手:
1. 先补全
auth.php里的Providers配置 你只贴了guards的配置,但必须确保providers数组里也有pemandu_bas的对应配置,否则guard找不到对应的用户模型:
'providers' => [ 'users' => [ 'driver' => 'eloquent', 'model' => App\User::class, ], // 一定要加上这个配置 'pemandu_bas' => [ 'driver' => 'eloquent', 'model' => App\PemanduBas::class, // 替换成你实际的模型类路径 ], ],
2. 检查
PemanduBas模型的认证实现 Laravel的认证模型必须实现Authenticatable接口,最简单的方式是直接继承框架的User基类(它已经封装了所有必要的认证逻辑):
<?php namespace App; use Illuminate\Foundation\Auth\User as Authenticatable; class PemanduBas extends Authenticatable { // 配置允许批量赋值的字段,至少包含认证用的email、password protected $fillable = ['email', 'password', 'name']; // 如果你的表名不是默认的`pemandu_bas`,需要手动指定 // protected $table = 'your_custom_table_name'; }
3. 路由必须指定对应的Guard中间件
你的API路由要明确告诉Laravel使用pemandu_bas这个guard做认证,而不是默认的api guard(默认绑定的是users):
// routes/api.php // 登录接口不需要认证 Route::post('pemandu-bas/login', 'PemanduBasAuthController@login'); // 需要认证的路由组,指定guard为pemandu_bas Route::group(['middleware' => 'auth:pemandu_bas'], function () { Route::get('pemandu-bas/profile', 'PemanduBasController@showProfile'); });
4. 登录逻辑要正确生成并返回Token
Laravel 5.4的token认证依赖数据库里的api_token字段,所以你需要:
- 给
pemandu_bas表添加api_token字段(生成迁移并执行):
Schema::table('pemandu_bas', function (Blueprint $table) { $table->string('api_token', 60)->unique()->nullable(); });
运行迁移:php artisan migrate
- 在登录控制器里生成并返回token:
public function login(Request $request) { $credentials = $request->only('email', 'password'); // 使用pemandu_bas guard验证登录凭证 if (Auth::guard('pemandu_bas')->attempt($credentials)) { $user = Auth::guard('pemandu_bas')->user(); // 如果用户还没有api_token,生成一个随机字符串 if (!$user->api_token) { $user->api_token = str_random(60); $user->save(); } return response()->json([ 'token' => $user->api_token, 'user' => $user ]); } return response()->json(['error' => '登录失败,邮箱或密码错误'], 401); }
5. Postman请求的正确姿势
请求需要认证的API时,把token放在请求头里:
- 键:
Authorization - 值:
Bearer {你的token字符串}
比如请求GET /api/pemandu-bas/profile时,请求头要加上:
Authorization: Bearer abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopqrstuvwxyz
常见错误排查
- 如果返回
Unauthenticated:先核对token是否和数据库里的api_token完全一致,再检查路由中间件是否指定了auth:pemandu_bas; - 如果模型相关报错:确认
PemanduBas模型正确继承了Authenticatable,且auth.php里的provider指向了正确的模型; - 如果登录时报错:检查
pemandu_bas表是否有email和password字段,且密码是用bcrypt加密存储的。
内容的提问来源于stack exchange,提问作者MrlinY
相关产品推荐
相关产品推荐

