• Symfony2 UserSecurityEncoder实现自己的验证方式


    fosuserbundle默认使用sha512加密
    
    如果要实现自己的加密方式 需要继承SymfonyComponentSecurityCoreEncoderBasePasswordEncoder
    
    <?php
    
    namespace McAdminBundleSecurityEncoder;
    
    use SymfonyComponentSecurityCoreEncoderBasePasswordEncoder;
    use SymfonyComponentSecurityCoreExceptionBadCredentialsException;
    
    class JoomlaPasswordEncoder extends BasePasswordEncoder
    {
        private $cost;
    
        public function __construct( $cost)
        {
            $cost = intval( $cost);
            if( $cost < 4 || $cost > 31 )
            {
                throw new InvalidArgumentException('Cost too long , it must be in the range of 4-31');
            }
            $this->cost = sprintf('%02d' , $cost);
        }
    
        public function encodePassword( $raw , $salt = null )
        {
            if( $this->isPasswordTooLong($raw) )
            {
                throw new BadCredentialsException('Invalid password.');
            }
            return md5( md5( $raw ) . $salt );
        }
    
        public function isPasswordValid($encoded, $raw, $salt = null)
        {
            if ($this->isPasswordTooLong($raw)) 
            {
                return false;
            }
    
    
            return md5( md5( $raw).$salt) === $encoded;
        }
    }
    然后写入service
    
    在bundle下面的Resources/config/services.yml(或者xml)添加一个服务:
    
        mc_user.security.core.encoder:
            class: McAdminBundleSecurityEncoderJoomlaPasswordEncoder
            arguments: [6]
    也可以在DependencyInjection/Configuration.php中添加参数:
    
            $rootNode->children()
                        ->scalarNode('cost')->defaultValue(6)->end()
                        ->end()
            ;
    最后在app/config/security.yml中设置自己的加密方式 这里用户组件是FOSUserBundle:
    
    security:
        encoders:
            SymfonyComponentSecurityCoreUserUser: plaintext
            FOSUserBundleModelUserInterface:
                id: mc_user.security.core.encoder
    这里的id是service名 即 mc_user.encoder
    
    done
  • 相关阅读:
    ::在c++中的应用
    VS2008工程一些操作
    vs2008添加链接库
    从服务器 (PC 端 ) 发送图片到客户端 (android 手机端 ) [转]
    Android PowerImageView实现,可以播放动画的强大ImageView[转]
    INI文件读写
    关于超链接伪类的使用,:link,:visited,:hover
    关于div的居中显示
    常见公告栏信息效果的实现
    利用ul,li,span,position:relative实现文本的居中显示
  • 原文地址:https://www.cnblogs.com/huidaoli/p/3980497.html
Copyright © 2020-2023  润新知