【问题标题】:Laravel 5.4 Auth guard driver [customers] is not definedLaravel 5.4 Auth Guardian 驱动程序 [customers] 未定义
【发布时间】:2017-07-19 02:07:04
【问题描述】:

我在 L5.2 中实现了自定义身份验证。我已经遵循了相同的步骤,但是我无法使用自定义身份验证登录/注册。以下是设置:

auth.php 我添加了 customers 自定义身份验证:

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

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

    'customers' => [
        'driver' => 'jwt',
        'provider' => 'customers',
    ],


],

// 提供者部分

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

     'customers' => [
         'driver' => 'eloquent',
         'model' => App\Customer::class,
     ],
],

然后在routes/api.php 中,我在从RouteServiceProvider.php 中删除middleware 后添加了以下代码

Route::group(['middleware' => 'customers'], function() {

    Route::post('login', 'JwtAuth\LoginController@login'); //Had made new auth for JWT
}

当我点击这个登录时,不是客户表,而是从用户表完成身份验证!

我还尝试在Controller\JwtAuth\LoginController.php 中使用以下代码:

public function login(Request $request)
{
    $credentials = $request->only('email', 'password');
    $customer = Auth::guard('customers')->attempt($credentials);

    try {
        // attempt to verify the credentials and create a token for the user
        if (!$token = JWTAuth::attempt($credentials)) {
            return response()->json(['error' => 'invalid_credentials'], 401);
        }
    } catch (JWTException $e) {
        // something went wrong whilst attempting to encode the token
        return response()->json(['error' => 'could_not_create_token'], 500);
    }
    // all good so return the token
    return response()->json(compact('token'), Response::HTTP_OK);
}

此代码抛出错误:

Auth guard driver [customers] is not defined.

在我的\App\Http\Kernel.php protected $middlewareGroups 下我添加了:

'api' => [
        'throttle:60,1',
        'bindings'
    ],

'customers' => [
        'throttle:60:1',
        'bindings'
    ]

令牌驱动程序或自定义驱动程序是否有任何变化。或者如何定义自定义的Auth驱动?

非常感谢任何帮助/指导。提前致谢。

【问题讨论】:

  • 我认为guard driver可以是token也可以是session。
  • 这些是默认选项,但我们可以使用自定义保护。它是否需要额外的设置,我不确定。!!
  • 是的,您可以使用自定义保护,但保护的后备驱动程序可以是令牌或会话。
  • 我希望使用 jwt 令牌。你能指导我整合jwt吗?我尝试使用令牌,但他们给出了一些其他错误......
  • 这里的关键不是guard driver,而是guard provider。这就是你需要实现的。驱动程序将用于查找当前请求的 ID,该 ID 将传递给提供者,以便提供者可以查找凭据(如果有)。

标签: php laravel authentication jwt laravel-5.4


【解决方案1】:

您还必须通过将其添加到应用程序AuthServiceProvider 的 boot() 方法来扩展您的身份验证:

public function boot()
{
    $this->registerPolicies();

    Auth::extend('customers', function ($app, $name, array $config) {
        return new CustomersGuard();
    });
}

documentation for adding custom guards

【讨论】:

    【解决方案2】:

    尝试清除配置缓存php artisan config:clear 或重建它php artisan config:cache

    【讨论】:

      【解决方案3】:
      Auth Guard driver is defined in config/auth.php 
      

      如下图

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

      并添加类似的提供者

      'providers' => [
          'users' => [
              'driver' => 'eloquent',
              'model' => App\Models\User::class,
          ],
      
          'customers' => [
              'driver' => 'eloquent',
              'model' => App\Models\Customer::class,
          ],
      
          // 'users' => [
          //     'driver' => 'database',
          //     'table' => 'users',
          // ],
      ],
      

      【讨论】:

        猜你喜欢
        • 2017-07-29
        • 1970-01-01
        • 1970-01-01
        • 2018-10-30
        • 1970-01-01
        • 2015-05-09
        • 2017-07-14
        • 2013-08-29
        • 2017-09-05
        相关资源
        最近更新 更多