我试图在验证用户身份时添加其他查询条件。
我有users表,它有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
,而不是简单的login
,但是这不起作用。如何在不创建自定义提供程序的情况下解决此问题?
谢谢。
最佳答案
实现所需结果的最简单方法是将其他查询参数传递给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 );
}
这应该行得通。
关于php - Laravel附加/自定义查询,用于验证用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57030593/