我正在寻找使用Acegi的插件Grails的密码检索过程的实现......谷歌失败我...的Grails Acegi的插件丢失的密码
3
A
回答
3
恕我直言,这是目前不是Acegi的插件的一部分。我向LoginController添加了一个忘记的密码操作:
def forgotPassword = {
if (params.username) {
User user = User.findByUsername(params.username)
if (user) {
def password = randomService.generateRandomString(8)
user.passwd = authenticateService.encodePassword(password)
if (!user.save(flush:true)) {
user.errors.each {
log.error "err $it"
}
flash.message = message(code: "LoginController.msg.forgot.error")
} else {
sendMail {
to user.username
subject message(code:"LoginController.mail.forgot.subject")
body(view:"forgotPasswordEmail", model: [person:user, password:password])
}
flash.message = message(code:"LoginController.msg.forgot", args:[user.username])
}
} else {
flash.message = message(code:"LoginController.msg.forgot.unknown", args:[params.username])
}
}
}
上面的代码使用Grails邮件插件。
3
谷歌正在失败,因为没有一个。真正无法扭转哈希密码(没有暴力破解和彩虹表),如果是,那就意味着你的系统不安全。
常见模式是用一次性使用令牌通过电子邮件发送忘记密码的用户,然后用它们将密码重置为任何他们想要的。这不是内置到框架中的,但手动操作并不难(我建议使用grails邮件插件)。
3
Acegi插件不支持开箱即用,但如果添加email-confirmation插件,则很容易推出自己的插件。
步骤如下:
创建要求用户输入他们的电子邮件地址和新密码密码重置形式。
处理密码重置表单的控制器操作应该验证数据,并且 使用电子邮件确认插件向用户发送电子邮件并提供链接供他们单击以确认其密码更改。您可以通过在插件添加的EmailConfirmationService服务上调用以下方法来完成此操作。
def sendConfirmation(String emailAddress, String theSubject, Map model = null,
String userToken = null)
其中:
emailAddress = address of user changing password
theSubject = subject of e-mail sent
model = any data passed to GSP that creates e-mail body
userToken = hashed user's password
当用户点击电子邮件中的链接(请参阅有关如何自定义此电子邮件信息的插件文档),该onConfirmation
关闭该服务将被调用。
此截止时间应在Bootstrap.groovy
分配是这样的:
def emailConfirmationService
def init = { servletContext ->
emailConfirmationService.onConfirmation = { email, hashedPassword ->
User user = User.findByEmail(email)
user.passwd = hashedPassword
if (!user.save()) {
// Handle this error, somehow....
}
// Then return a map which will redirect the user to the login screen (for example)
[controller:'userProfile', action:'login']
}
}
注意用户的电子邮件和哈希密码被传递到这个闭合,使您能够重置并保存用户的密码。
相关问题
- 1. 的Grails Acegi的插件用户推荐
- 2. Acegi密码加密
- 3. Grails Acegi插件 - 如何更新缓存?
- 4. 丢失的密钥库密码
- 5. 密钥库密码丢失
- 6. 为什么grails的acegi插件不能在weblogic中工作?
- 7. 使用Grails的acegi插件共享会话(或cookie)
- 8. 未添加到Maven的Grails acegi插件类
- 9. 编码与Spring Security的Grails的插件密码
- 10. 密钥库 - 丢失的别名,但有密码和文件
- 11. SSL丢失密码恢复
- 12. 的Acegi/Spring Security的Grails的插件没有看到变化的用户实例
- 13. Grails + Acegi:如何处理密码更新?记录与未记录的用户
- 14. 需要有关的Grails和Acegi的
- 15. Grails,从Acegi升级到Spring安全插件
- 16. Grails Acegi插件springsecurity.GrailsDaoImpl - 用户[admin]没有GrantedAuthority
- 17. 如何以编程方式在Grails中注销acegi插件?
- 18. 导入插件Grails的失败
- 19. kinetic.d.ts的插件标签丢失
- 20. Grails Acegi Plugin - PersonController.groovy - 请解释!
- 21. Kate External Tools插件丢失
- 22. 为丢失的密码生成验证码?
- 23. django admin丢失密码恢复
- 24. 验证grails中的加密密码
- 25. 丢失的文件不能丢失?
- 26. Android密钥丢失
- 27. Grails弹簧安全/ Acegi。自定义用户+密码过期管理
- 28. DocumentDB的Grails插件
- 29. Grails的插件库
- 30. org.apache.maven.plugins:Maven的编译器插件丢失甚至有插件在Eclipse
这是一个很好的开始实施。一个潜在的问题是它会自动重置密码,即使其他人请求密码也是如此,所以恶意用户有可能不断地点击“重置密码”并更改用户的密码,但实际上并不希望密码被更改(尽管它们“ d仍然收到电子邮件)。 我们做了这样的事情,但是有一张桌子只有一段时间使用令牌,短时间通过电子邮件发送来重置密码。如果令牌未使用,则密码不变。表中每个用户最多只能有一个令牌。 – 2009-10-31 17:40:59
完全同意。另一种选择是人类网站的一种安全问题,例如“你母亲的娘家姓什么?”。只有正确回答问题,密码才会重置。也许这是有道理的,以取决于acegi插件的独立插件中的账户处理函数“恢复密码”,“恢复登录名”,“删除账户”。 – 2009-11-01 17:08:20