我构建了一个应用程序,它有一个普通的登录,使用认证插件,还有其他形式的登录,发生在控制器中。在cakephp 3中,我们可以使用$this-〉Auth()-〉login,$this-〉Auth()-〉setUser,等等。但是在cakephp 4中,认证插件没有$this-〉认证-〉login/setUser。问题是我该怎么做?
我在控制器中获得用户,但我没有任何方法登录该用户。
我想知道你们中是否有人遇到过这个问题
这是我的身份验证服务:
public function getAuthenticationService(ServerRequestInterface $request): AuthenticationServiceInterface
{
$service = new AuthenticationService();
// Define where users should be redirected to when they are not authenticated
$service->setConfig([
'unauthenticatedRedirect' => Router::url([
'prefix' => false,
'plugin' => null,
'controller' => 'Users',
'action' => 'login',
]),
'queryParam' => 'redirect',
]);
$fields = [
IdentifierInterface::CREDENTIAL_USERNAME => 'email',
IdentifierInterface::CREDENTIAL_PASSWORD => 'password'
];
// Load the authenticators. Session should be first.
$service->loadAuthenticator('Authentication.Session');
if ($request->getParam('action') == 'googleLogin') {
$service->loadAuthenticator('Authentication.Form', [
'fields' => $fields,
'loginUrl' => Router::url([
'prefix' => false,
'plugin' => null,
'controller' => 'Users',
'action' => 'googleLogin',
]),
]);
} else {
$service->loadAuthenticator('Authentication.Form', [
'fields' => $fields,
'loginUrl' => Router::url([
'prefix' => false,
'plugin' => null,
'controller' => 'Users',
'action' => 'login',
]),
]);
}
// Load identifiers
$service->loadIdentifier('Authentication.Password', compact('fields'));
return $service;
}
这是控制器
$this->Authorization->skipAuthorization();
$data = $this->request->getData();
$email = $data['email'];
$repository = new UserRepository($this->Users);
$user = $repository->findUserByEmail($email);
$response = $this->response;
if (!empty($user)) {
$response->withStatus(201);
return $response;
} else {
$user = $this->Users->newEmptyEntity();
$dataUser['username'] = $email;
$dataUser['email'] = $email;
$dataUser['password'] = 'esquemaPerfecto';
$dataUser['role'] = 'cliente';
$user = $this->Users->patchEntity($user, $dataUser);
if ($this->Users->save($user)) {
$this->Authentication->setUser($user);
$sendEmail = new EmailHelper($dataUser['email'], 'Vehiculos de Primera mano Registro', 'Usted se ha registrado con exito en la pagina de Vehiculos de Primera Mano y su contraseña es ' . $dataUser['passwords']);
$sendEmail->send();
$response->withStatus(200);
return $response;
}
}
$response->withStatus(400);
return $response;
}
欢迎提出各种想法
1条答案
按热度按时间i86rm4rw1#
根据Migration from the AuthComponent文档章节
在调用AuthComponent::setUser()的任何地方,现在都应该使用setIdentity():