gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-31 21:47:10 24 4
gpt4 key购买 nike

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com