我正在尝试在验证用户身份时添加附加的条件查询。
我有users表,并且它有printf@GLIBC.2.2.5
列。我只需要验证具有定义角色的特定用户。
这是我的控制器方法
role
public function login( UserAuthRequest $request ) {
$credentials = $request->only( 'login', 'password' );
if ( $token = $this->guard()->attempt( $credentials ) ) {
return $this->respondWithToken( $token );
}
return response()->json( [ 'error' => 'Unauthorized' ], 401 );
}
部分
auth.php
管理员用户拥有自己的名为'admin-users' => [
'driver' => 'eloquent',
'model' => AdminUser::class,
],
的表,并带有admin_users
表的外键。
结果是出现以下错误
users
我尝试通过Column not found: 1054 Unknown column 'login' in 'where clause' (SQL: select * from `admin_users` where `login` = admin limit 1)"
而不是简单地通过userEntity.login
,但这是行不通的。
如何在不创建自定义提供程序的情况下解决此问题?
谢谢。
答案 0 :(得分:0)
获得所需结果的最简单方法是将其他查询参数传递给attempt
方法。
如果我们查看retrieveByCredentials
中的EloquentUserProvider
方法:
foreach ($credentials as $key => $value) {
if (Str::contains($key, 'password')) {
continue;
}
if (is_array($value) || $value instanceof Arrayable) {
$query->whereIn($key, $value);
} else {
$query->where($key, $value);
}
}
我们可以看到,它向查询添加了除密码之外的所有内容。
因此,我们可以使用凭据在同一数组中传递其他where条件:
$credentials = $request->only( 'login', 'password' );
// Append user role
$credentials['role'] = "admin";
if ( $token = $this->guard()->attempt( $credentials ) ) {
return $this->respondWithToken( $token );
}
这应该很好。