【问题标题】:how to implements auth with username or email如何使用用户名或电子邮件实现身份验证
【发布时间】:2019-01-31 00:01:16
【问题描述】:

我在我的应用程序中为 symfony 2.8 实现了 lexik jwt 包,我试图通过用户登录或电子邮件使用它,但我无法以任何方式做到这一点。

该捆绑包可以正常工作,但我无法将其配置为能够通过电子邮件或用户名进行身份验证,并且我还没有找到如何通过文档或互联网进行身份验证的示例。

我的代码就像文档显示的一样,我尝试从 JWTTokenValidator 扩展来实现它,但我无法接近。

如何配置它以通过电子邮件或用户名和密码实现用户身份验证?

【问题讨论】:

    标签: symfony jwt symfony-2.8 lexikjwtauthbundle


    【解决方案1】:

    我通过用户名和电子邮件归档了身份验证,唯一必须做的就是向图书馆提供另一个用户提供者。 您只需要一个实现 UserProviderInterface 的类,特别是带有自定义身份验证逻辑的 loadUserByUsername 方法。然后将其作为依赖注入到lexik jwt的服务中。 例如:

     class AuthUserProvider implements UserProviderInterface
    {
    
        /**
         * @var UserRepository
         */
        private $userManager;
    
        public function __construct(UserManager $userManager)
        {
            $this->userManager = $userManager;
        }
    
        public function loadUserByUsername($username)
        {
            $foundedUser = $this->userManager->findUserByUsernameOrEmail($username);
    
            if ($foundedUser === null) {
                throw new UsernameNotFoundException();
            }
    
            return $foundedUser;
        }
    
        public function refreshUser(UserInterface $user)
        {
            // TODO: Implement refreshUser() method.
        }
    
        public function supportsClass($class)
        {
            // TODO: Implement supportsClass() method.
        }
    }
    

    我的 bundle service.yml 看起来像这样:

    api_bundle.security.auth_user_provider:
            class: Project\TheOwn\ApiBundle\Security\AuthUserProvider
            arguments:
                - '@the_own.core.manager.user'
            public: true
    

    还有我的 security.yml :

    security:
    encoders:
        FOS\UserBundle\Model\UserInterface: sha512
    
    providers:
        auth_user_provider:
            id: api_bundle.security.auth_user_provider
    firewalls:
        login:
            pattern:  ^/api/signin
            stateless: true
            anonymous: true
            provider: auth_user_provider
            form_login:
                check_path:               /api/signin
                success_handler:          lexik_jwt_authentication.handler.authentication_success
                failure_handler:          lexik_jwt_authentication.handler.authentication_failure
                require_previous_session: false
    
        api:
            pattern: ^/api/
            security: true
            stateless: true
            provider: auth_user_provider
            guard:
                authenticators:
                    - lexik_jwt_authentication.jwt_token_authenticator
    
    access_control:
        - { path: ^/api/signin, roles: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/api,       roles: IS_AUTHENTICATED_FULLY }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-13
      • 2021-03-08
      • 2016-03-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多