我一直在尝试为我的基于 VueJS axios 的用户部分集成 json 登录,并为管理员提供表单登录。
我已经安装了 EasyAdmin 并且管理员的表单登录工作正常,但基于 api 的 json 登录根本不起作用。
在这里分享我的 security.yaml 文件
security:
enable_authenticator_manager: true
password_hashers:
Symfony\Component\Security\Core\User\PasswordAuthenticatedUserInterface: 'auto'
App\Entity\Admin:
algorithm: auto
App\Entity\User:
algorithm: auto
providers:
user_provider:
entity:
class: App\Entity\User
property: email
admin_provider:
entity:
class: App\Entity\Admin
property: email
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
admin_secured_area:
pattern: ^/admin
provider: admin_provider
form_login:
login_path: /admin/login
check_path: /admin/login_check
default_target_path: /admin/login
username_parameter: email
password_parameter: password
entry_point: App\Security\AdminAuthenticator
custom_authenticator:
- App\Security\AdminAuthenticator
logout:
path: admin_logout
target: /admin/login
user_secured_area:
pattern: ^/api
provider: user_provider
json_login:
check_path: user_login
entry_point: App\Security\UserAuthenticator
custom_authenticator:
- App\Security\UserAuthenticator
logout:
path: user_logout
target: /api/login
access_control:
- { path: ^/admin/login, roles: PUBLIC_ACCESS }
- { path: ^/login, roles: PUBLIC_ACCESS }
- { path: ^/sign-up, roles: PUBLIC_ACCESS }
- { path: ^/admin, roles: ROLE_ADMIN }
when@test:安全性:password_hashers:Symfony\Component\Security\Core\User\PasswordAuthenticatedUserInterface:算法:自动成本:4 time_cost:3 memory_cost:10
当我尝试访问UserAuthenticator.php
文件中的电子邮件时,我得到空值。也分享该代码:
class UserAuthenticator extends AbstractLoginFormAuthenticator
{
use TargetPathTrait;
public const LOGIN_ROUTE = 'user_login';
private UrlGeneratorInterface $urlGenerator;
public function __construct(UrlGeneratorInterface $urlGenerator)
{
$this->urlGenerator = $urlGenerator;
}
public function authenticate(Request $request): Passport
{
$email = $request->request->get('username', '');
var_dump($email); //gives string(0)
exit;
$request->getSession()->set(Security::LAST_USERNAME, $email);
return new Passport(
new UserBadge($email),
new PasswordCredentials($request->request->get('password', '')),
[
new CsrfTokenBadge('authenticate', $request->request->get('_csrf_token')),
]
);
}`
在这里我想我也应该分享一下 VueJS 代码。
axios.defaults.headers.common["Content-Type"] = "application/json";
axios({
method: "POST",
url: "/api/login",
data: {
username: this.email,
password: this.password,
},
headers: {
"Content-Type": "application/json",
},
}).then((response) => {
console.log(response);
});
我还应该通知我尝试使用以下 security.yaml 但没有运气
`
提供者:user_provider:实体:类:App\Entity\User 属性:电子邮件 admin_provider:实体:类:App\Entity\Admin 属性:电子邮件
防火墙:开发:模式:^/(_(profiler|wdt)|css|images|js)/ 安全性:false
main:
lazy: true
json_login:
provider: user_provider
check_path: user_login
entry_point: App\Security\UserAuthenticator
custom_authenticator:
- App\Security\UserAuthenticator
logout:
path: user_logout
target: /api/login
admin_secured_area:
pattern: ^/admin
provider: admin_provider
form_login:
login_path: /admin/login
check_path: /admin/login_check
default_target_path: /admin/login
username_parameter: email
password_parameter: password
entry_point: App\Security\AdminAuthenticator
custom_authenticator:
- App\Security\AdminAuthenticator
logout:
path: admin_logout
target: /admin/login
其余同上`
但没有运气`