Laravel附加/自定义查询,用于验证用户

时间:2019-07-14 19:43:50

标签: php laravel authentication laravel-5

我正在尝试在验证用户身份时添加附加的条件查询。

我有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,但这是行不通的。

如何在不创建自定义提供程序的情况下解决此问题?

谢谢。

1 个答案:

答案 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 );
}

这应该很好。