我使用的是laravel,但我要添加我的自定义用户提供程序,以及注册该用户提供程序的自定义身份验证提供程序。
当我致电Auth::Attempt
时,它可以工作并返回true
,然后致电Auth::Check
返回true
且Auth::User
在那,但是当我导航到另一个页面上,auth
是false
。
我再次检查了会话是否运行正常,我的路由已添加到网络组:
auth.php
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
]
],
'providers' => [
'users' => [
'driver' => 'custom_provider',
'model' => App\Models\User::class,
]
],
用户模型
<?php
namespace App\Models;
use Illuminate\Foundation\Auth\User as Authenticatable;
class User extends Authenticatable
{
public $incrementing = false;
protected $primaryKey = null;
protected $fillable = [
'name', 'email', 'password','mobile','token'
];
protected $hidden = [
'password', 'remember_token',
];
}
用户提供商
public function retrieveByCredentials(array $credentials)
{
$client = new Client();
$options = [
'json' => [
'mobile' => $credentials['email'],
'email' => $credentials['email'],
'password' => $credentials['password'],
],
];
$loginRes= $client->request('POST','http://localhost:1235/users/login',$options);
$loginResponse=json_decode($loginRes->getBody()->getContents(),true);
if($loginResponse['success'])
{
$credentials['token']=$loginResponse['token'];
$credentials['email']=$loginResponse['email'];
$credentials['mobile']=$loginResponse['mobile'];
$credentials['name']=$loginResponse['name'];
$credentials['remember_token']=$loginResponse['remember_token'];
}
else {
$credentials['token']='token';
$credentials['remember_token']='remember_token';
}
return new $this->model($credentials);
}
public function validateCredentials(Authenticatable $user, array $credentials)
{
// return $user->token != 'token';
return true;
}
有什么想法吗?
PHP 7.2和7.3版本