You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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字段,所以你需要:

  1. 给pemandu_bas表添加api_token字段(生成迁移并执行):
Schema::table('pemandu_bas', function (Blueprint $table) {
    $table->string('api_token', 60)->unique()->nullable();
});

运行迁移:php artisan migrate

  1. 在登录控制器里生成并返回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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:27:28