繁体   English   中英

Symfony6 使用 memory 用户提供程序登录

Symfony6 login with memory user provider

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我尝试使用官方文档的 symfony 的 memory 用户提供程序登录

所以我让我的用户使用symfony console make:user ,我让默认值并选择“否”来使用数据库。

我在security.yaml和一些配置中添加了我的管理员用户:

security:
  password_hashers:
    Symfony\Component\Security\Core\User\PasswordAuthenticatedUserInterface: "auto"
  providers:
    app_user_provider:
      id: App\Security\UserProvider
    backend_users:
      memory:
        users:
          my:
            {
              password: "$2y$…B3", // i put my true bcrypt generated password
              roles: ["ROLE_ADMIN", "ROLE_SUPER_ADMIN"],
            }
  firewalls:
    dev:
      pattern: ^/(_(profiler|wdt)|css|images|js)/
      security: false
    main:
      lazy: true
      provider: app_user_provider
  access_control:
    - { path: ^/admin, roles: ROLE_ADMIN }
    - { path: ^/profile, roles: ROLE_USER }
when@test:
  security:
    password_hashers:
      Symfony\Component\Security\Core\User\PasswordAuthenticatedUserInterface:
        algorithm: bcrypt
        cost: 4 # Lowest possible value for bcrypt
        time_cost: 3 # Lowest possible value for argon
        memory_cost: 10 # Lowest possible value for argon

我进行登录操作:

    #[Route('/{_locale<%app.supported_locales%>}/login', name: 'my_login')]
    public function login(AuthenticationUtils $authenticationUtils): Response
    {
        // get the login error if there is one
        $error = $authenticationUtils->getLastAuthenticationError();

        // last username entered by the user
        $lastUsername = $authenticationUtils->getLastUsername();
        return $this->render('@MyCore/Core/login.html.twig', [
            'controller_name' => 'CoreController',
            'last_username' => $lastUsername,
            'error'         => $error,
        ]);
    }

使用文档中的相关表格:

{% extends '@MyCore/layout-default.html.twig' %}

{% block body %}
    {% if error %}
        <div>{{ error.messageKey|trans(error.messageData, 'security') }}</div>
    {% endif %}

    <form action="{{ path('my_login') }}" method="post">
        <label for="username">Username:</label>
        <input type="text" id="username" name="_username" value="{{ last_username }}"/>

        <label for="password">Password:</label>
        <input type="password" id="password" name="_password"/>

        {# If you want to control the URL the user is redirected to on success
                <input type="hidden" name="_target_path" value="/account"/> #}

        <input type="hidden" name="_csrf_token" value="{{ csrf_token('authenticate') }}">

        <button type="submit">login</button>
    </form>

{% endblock %}

而且……什么也没有发生。 当我尝试使用真实用户或随机错误条目登录时,没有错误,没有日志记录,只是我 go 回到“/ login”,好像什么也没发生。

我忘了什么吗?

3 个回复

没有配置防火墙来使用您的backend_users用户提供程序。

如果要将内存用户用于main防火墙,请按如下方式配置:

security:
  # [..]
  providers:
    backend_users:
      memory:
        users: [] # <- add your users here
  firewalls:
    main:
      lazy: true
      provider: backend_users # <- use the provider here

您正在使用app_user_provider ,但您需要同时使用 2 个提供程序,即app_user_providerbackend_users提供程序。 要构建它,您需要使用提供程序链( Symfony Doc ):

# config/packages/security.yaml
security:
    # ...
    providers:
        backend_users:
            # ...

        app_user_provider:
            # ...

        all_users:
            chain:
                providers: ['backend_users', 'app_user_provider']
    firewalls:
        main:
            lazy: true
            provider: all_users # all_users => provider chain

您的问题来自您的安全配置。 如果您需要添加两个用户,那么您应该使用链,请查看 Symfony 文档。

1 使用symfony和用户提供程序的登录信息

我想了解安全性如何与用户提供程序一起使用。 在security.yaml中,我可以写: 因此,将“ userLogin”定义为适当的字段,以用作“用户名”进行身份验证。 那是对的吗? 然后,为什么我的User类似乎必须实现Symfony\\Component\\Security\\ ...

2 Symfony 链提供程序(memory 用户中的开发模式)

有一个历史上要求我通过 LDAP/AD 登录的应用程序。 当我安装了 VPN 并且我可以看到他们的 AD 服务器时,这很有效。 我想通过在 memory 用户中使用开发模式并配置链验证器来消除这种依赖: 不工作 - 有什么想法吗? ...

3 Symfony 6 登录不运行身份验证

我正在尝试在 symfony 6 中制作一个小型应用程序来练习,但我无法登录工作。 我使用了命令make:user 、 make:crud user 、 make:auth ,并且我让应用程序为我构建了登录。 问题是我设法正确注册了用户(散列密码),但是当我尝试登录时,它只会将我重定向到同一页面,它 ...

7 Symfony 6 在 Mac 上使用 Docker 开发

我正在 Symfony 6 上启动一个新项目。每次我对项目进行更改时, var/cache都会完全重建,因此对应用程序的下一个请求总是超时。 我能做些什么来禁止var/cache在每次更改时重建? 或者甚至不使用这个缓存? ...

9 从 Symfony 6 命令记录

我正在使用 Symfony 命令在 cron 作业中运行,一切正常,除了我无法记录任何内容。 这是我的代码 现在我尝试将其称为命令行: 但是我的日志文件中什么也没有 还尝试通过 crontab 配置运行命令: 我再次尝试将详细级别切换为错误: 这一次,从命令行我可以看到错误日志: ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM