gpt4 book ai didi

php - 为什么 Auth::attempt 在 Laravel 5.3 中总是返回 false?

转载 作者:行者123 更新时间:2023-12-05 07:46:38 24 4
gpt4 key购买 nike

我是 Laravel 的新手。我尝试在 Laravel 5.3 中使用多重身份验证,我的 auth.php 文件是:

<?php

return [

*/

'defaults' => [
'guard' => 'web',
'passwords' => 'users',
],

'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],

'api' => [
'driver' => 'token',
'provider' => 'users',
],

'courier' => [
'driver' => 'session',
'provider' => 'couriers',
],

'client' => [
'driver' => 'session',
'provider' => 'clients',
]
],

'providers' => [
'couriers' => [
'driver' => 'eloquent',
'model' => App\Courier::class,
],

'clients' => [
'driver' => 'eloquent',
'model' => App\Client::class,
],

'users' => [
'driver' => 'eloquent',
'model' => App\User::class,
]
],

'passwords' => [
'couriers' => [
'provider' => 'couriers',
'table' => 'password_resets',
'expire' => 60,
],

'clients' => [
'provider' => 'clients',
'table' => 'password_resets',
'expire' => 60,
],
],

];

然后,当我在数据库中存储客户或信使时,我使用 bcrypt 作为密码(Bring 也使用函数 Hash::make() 作为密码)。例如,我的模型 Courier 是:

<?php

namespace App;

use Illuminate\Foundation\Auth\User as Authenticatable;

class Courier extends Authenticatable
{
[..]

public function setPasswordAttribute($pass){
$this->attributes['password'] = bcrypt($pass);
}

[..]
}

更新 express 时,在我的 Controller 中我有:

public function update(Request $request, $id) {

$fieldsCourier = $request->all();
$courier = Courier::find($id);

if( isset($fieldsCourier['password']) )
$fieldsCourier['password'] = bcrypt($fieldsCourier['password']);

if( $courier->update($fieldsCourier) )
$courier = Courier::find($id);

}

我有一个名为 authenticate 的方法,但该方法尝试总是返回 false (invalid_credentials)。即便如此,请发送有效凭证。这是我的代码:

public function authenticate(Request $request) {
$credentials = $request->only('email', 'password');

try {
if ( auth()->guard('courier')->attempt($credentials) ){
$user = Auth::guard('courier')->user();
} else {
return response()->json(['error' => 'invalid_credentials'], 401);
}
} catch (JWTException $e) {
return response()->json(['error' => 'could_not_create_token'], 500);
}

return response()->json(compact('user'));
}

我不知道我做错了什么。我做错了什么吗?

最佳答案

您已在模型和 Controller 上对密码进行了两次加密。

只删除其中一个

例如:不要在你的 Controller 上使用 bcrypt,因为你已经在你的模型上使用了 bcrypt

关于php - 为什么 Auth::attempt 在 Laravel 5.3 中总是返回 false?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40537013/

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