gpt4 book ai didi

grails - Grails Acegi:更新用户名

转载 作者:行者123 更新时间:2023-12-02 14:21:53 26 4
gpt4 key购买 nike

我在Grails应用中使用了Acegi(又名Spring Security)插件。在SecurityConfig.groovy中,我添加了这一行

userName = 'email'

以便将电子邮件字段用作用户名。我发现如果我更改电子邮件字段并保存对象,例如
user.email = 'my_new_email@foo.com'
user.save(failOnError: true)

保存完成,没有错误,但是电子邮件字段实际上并未更新。我的猜测是Acegi插件禁止更改用户名字段,但是如果有人可以确认,我将不胜感激。

谢谢,

最佳答案

acegi使用的域对象被缓存。碰巧的是,我在本周和昨天在wrote up the solution遇到了同样的问题!

总之,您有两个选择:

通过向您的SecurityConfig.groovy添加cacheUsers = false来关闭域对象的缓存。

通过在SecurityContextHolder中替换域对象来刷新它

private def refreshUserPrincipal(user) {
GrantedAuthority[] auths = user.authorities.collect {
new GrantedAuthorityImpl(it.authority)
}
def grailsUser = new GrailsUserImpl(
user.username
"",
true,
true,
true,
true,
auths,
user);
def authToken = new UsernamePasswordAuthenticationToken(grailsUser, "", auths)
SecurityContextHolder.context.authentication = authToken
}

(检查 GrailsUserImpl的来源以查看所有这些真实值的含义!)

关于grails - Grails Acegi:更新用户名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2420249/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com