0

我一直在尝试为我的基于 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

其余同上`

但没有运气`

4

0 回答 0