使用JWT auth的Laravel Multiple Auth我每次都输错密码

时间:2018-01-26 03:13:09

标签: laravel authentication laravel-5 jwt jwt-auth

我有2个用户,即用户和总线,对于他们我有不同的型号 我正在使用laravel 5.5和tymondesigns / jwt-auth 1.0.0-rc.1 verson

用户正在为用户工作,我也获得了令牌  但是公交用户我们得到'invalid_email_or_password'

链接到完整代码full source code link

这是我的用户模型:

    class User extends Authenticatable implements JWTSubject{
use Notifiable;
protected $fillable = ['name', 'email', 'password'];
public function getJWTIdentifier()
{
    return $this->getKey();
}
public function getJWTCustomClaims()
{
    return [];
}}  

my config / auth.php

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

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

    'bus' => [
        'driver' => 'session',
        'provider' => 'buses',
    ],
    'bus-api' => [
        'driver' => 'jwt',
        'provider' => 'buses',
    ],
],

我的提供商是:

'providers' => [
    'users' => [
        'driver' => 'eloquent',
        'model' => App\User::class,
    ],
    'admins' => [
        'driver' => 'eloquent',
        'model' => App\Admin::class,
    ],

    //next
    'buses' => [
        'driver' => 'eloquent',
        'model' => App\Bus::class,
    ],

我的buslogincontroller,它取用户名&用户表的密码

    public function busLogin(Request $request)
{
    \Config::set('jwt.user', "App\Bus");
    \Config::set('auth.providers.users.model', \App\Bus::class);
    $credentials = $request->only('email', 'password');
    try {
        \Config::set('jwt.user', "App\Bus");
        \Config::set('auth.providers.users.model', \App\Bus::class);
        if (!$token = JWTAuth::attempt($credentials)) {
            \Config::set('jwt.user', "App\Bus");
            \Config::set('auth.providers.users.model', \App\Bus::class);
            return response()->json([
                'response' => 'error',
                'message' => 'invalid_email_or_password',
            ]);
        }
    } catch (JWTAuthException $e) {
        return response()->json([
            'response' => 'error',
            'message' => 'failed_to_create_token',
        ]);
    }
    return response()->json([
        'response' => 'success',
        'result' => [
            'token' => $token,
            'message' => 'I am Admin user',
            'user' => '99',
        ],
    ]);
}

我的路线api:

Route::post('bus/auth/login', 'Bus\Auth@busLogin');
Route::post('bus/auth/register', 'Bus\Auth@busRegister');

每当我尝试使用Bus model username&密码我在buscontroller登录路由中获得无效登录但如果我尝试使用用户模型信用登录,我得到令牌作为回报 如何使用laravel 5.5使用jwtauth设置多个auth

2 个答案:

答案 0 :(得分:0)

您只需在route api

中的路由呼叫之前设置以下代码
\Config::set('jwt.user', "App\Bus");
\Config::set('auth.providers.users.model', \App\Bus::class);

答案 1 :(得分:0)

无需更改config/auth.php中的提供程序。

您可以按以下方式在每个控制器中更改__construct函数。这样jwt知道要验证哪种模型。

BusController

function __construct()
{
    Config::set('jwt.user', Bus::class);
    Config::set('auth.providers', ['users' => [
            'driver' => 'eloquent',
            'model' => Bus::class,
        ]]);
}

AdminController

function __construct()
{
    Config::set('jwt.user', Admin::class);
    Config::set('auth.providers', ['users' => [
            'driver' => 'eloquent',
            'model' => Admin::class,
        ]]);
}