Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
每次我输入错误密码时,使用JWT Auth进行Laravel多重身份验证_Laravel_Authentication_Laravel 5_Jwt_Jwt Auth - Fatal编程技术网

每次我输入错误密码时,使用JWT Auth进行Laravel多重身份验证

每次我输入错误密码时,使用JWT Auth进行Laravel多重身份验证,laravel,authentication,laravel-5,jwt,jwt-auth,Laravel,Authentication,Laravel 5,Jwt,Jwt Auth,我有两个用户,即用户和总线,对于他们,我有不同的型号 我将Laravel5.5与tymondesigns/JWTAuth1.0.0-rc.1Verson一起使用 用户是完美的工作为用户我也得到令牌 但是巴士用户我们收到“无效的电子邮件或密码” 链接到完整代码 这是我的用户模型: class User extends Authenticatable implements JWTSubject{ use Notifiable; protected $fillable = ['name', '

我有两个用户,即用户和总线,对于他们,我有不同的型号 我将Laravel5.5与tymondesigns/JWTAuth1.0.0-rc.1Verson一起使用

用户是完美的工作为用户我也得到令牌 但是巴士用户我们收到“无效的电子邮件或密码”

链接到完整代码

这是我的用户模型:

    class User extends Authenticatable implements JWTSubject{
use Notifiable;
protected $fillable = ['name', 'email', 'password'];
public function getJWTIdentifier()
{
    return $this->getKey();
}
public function getJWTCustomClaims()
{
    return [];
}}  
'providers' => [
    'users' => [
        'driver' => 'eloquent',
        'model' => App\User::class,
    ],
    'admins' => [
        'driver' => 'eloquent',
        'model' => App\Admin::class,
    ],

    //next
    'buses' => [
        'driver' => 'eloquent',
        'model' => App\Bus::class,
    ],
我的配置/auth.php

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

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

    'bus' => [
        'driver' => 'session',
        'provider' => 'buses',
    ],
    'bus-api' => [
        'driver' => 'jwt',
        'provider' => 'buses',
    ],
],
我的提供商是:

    class User extends Authenticatable implements JWTSubject{
use Notifiable;
protected $fillable = ['name', 'email', 'password'];
public function getJWTIdentifier()
{
    return $this->getKey();
}
public function getJWTCustomClaims()
{
    return [];
}}  
'providers' => [
    'users' => [
        'driver' => 'eloquent',
        'model' => App\User::class,
    ],
    'admins' => [
        'driver' => 'eloquent',
        'model' => App\Admin::class,
    ],

    //next
    'buses' => [
        'driver' => 'eloquent',
        'model' => App\Bus::class,
    ],
我的 my 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');
每当我尝试使用总线模型用户名和密码登录时,我在总线控制器登录路径中获得无效登录,但如果我尝试使用用户模型凭据登录,我将获得令牌作为回报
如何使用jwtauth和laravel 5.5设置多重身份验证?在路由api中进行路由调用之前,只需设置以下代码

\Config::set('jwt.user', "App\Bus");
\Config::set('auth.providers.users.model', \App\Bus::class);

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

您可以按如下方式更改每个控制器中的_构造函数。以便jwt知道要验证哪个模型

总线控制器

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

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

您在哪里为用户和总线设置身份验证保护?内核路由服务提供商?我将在这里设置config/auth.php完整的源代码。谢谢,在你的问题中发布代码更有用。当一个简单的编辑可以更进一步的时候,我宁愿不去挖掘你的存储库。@btl。上面已经给出了i config/auth.php,提前感谢您误解了,您在哪里设置路由将使用的防护<代码>路由::组(['middleware'=>['auth:api',…],函数(){…路由…});例如。