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

标签 php laravel authentication laravel-5

我试图在验证用户身份时添加其他查询条件。
我有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/

相关文章:

authentication - 在没有模型的情况下使用 Guardian

ubuntu - Jenkins cli 命令返回身份验证错误

java - 如果另一个用户登录,预身份验证不起作用 - Spring 安全

php - cli 上的相同 MySQL 转储命令和 PHP 返回不同

Php Echo 无法在 header 上工作?

php - mysql php 语法错误

laravel - 图片 :make(path) Image source not readable when i use artisan custom command

laravel - 为模型设置数据库?

php - Laravel 获取用户今天和明天生日

php - 将产品添加到购物车后获取报价项目 ID