修改edusoho登录功能代码 供大家作为学习参考
一、修改Topxia/WebBundle/Resources/config/services.yml Parameters
Custom\WebBundle\Handler\XXXXAuthenticationProvider
二、添加XXXXAuthenticationProvider
symfony这个框架很NX,感觉和java里面的spring有点像,自己实现了一套mvc框架,又能集成很多组件进去,又实现了一套安全框架。代码精髓并没有领悟,反正是找到修改的地方了。edusoho里面是通过 AuthenticationProvider来判断登录的。
两个方法:
protected function checkAuthentication(UserInterface $user, UsernamePasswordToken $token)
protected function retrieveUser($username, UsernamePasswordToken $token)
第一个方法就是校验密码的,第二个获取用户信息
在checkAuthentication方法里面,以下代码就是判断密码是否正确的,自己定义一个encoder继承MessageDigestPasswordEncoder,实现 encodePassword即可。
if (!$this->encoderFactory->getEncoder($user)->isPasswordValid($user->getPassword(), $presentedPassword, $user->getSalt())) {
throw new BadCredentialsException('The presented password is invalid.');
}
三、修改注册 Topxia/Service/User/Impl/UserServiceImpl 里的register方法
$user['salt'] = base_convert(sha1(uniqid(mt_rand(), true)), 16, 36);
$user['password'] = $this->getPasswordEncoder()->encodePassword($registration['password'], $user['salt']);
将这块和登录修改成一致即可。
我的演示案例 http://all.zkdygl.com/