Laravel 5.4 Auth Guardian 驱动程序 [customers] 未定义
Posted
技术标签:
【中文标题】Laravel 5.4 Auth Guardian 驱动程序 [customers] 未定义【英文标题】:Laravel 5.4 Auth guard driver [customers] is not defined 【发布时间】: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 将传递给提供者,以便提供者可以查找凭据(如果有)。 【参考方案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',
// ],
],
【讨论】:
以上是关于Laravel 5.4 Auth Guardian 驱动程序 [customers] 未定义的主要内容,如果未能解决你的问题,请参考以下文章
Laravel 5.4 Auth::User() 与关系不起作用
Laravel 5.4 Tymon JWT Auth Guard 驱动未定义