gpt4 book ai didi

facebook - 当涉及 spring security facebook 时,使用虚拟数据引导 grails 应用程序

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

我创建了一个 grails 应用程序,它使用 spring security 允许用户通过 facebook 进行身份验证,并且我可以成功地将 facebook 用户名打印到其中一个 View 上,到目前为止我没有任何问题。

我的问题在于尝试使用给定 facebook 用户的一些示例数据来引导我的应用程序,因此我不必在每次应用程序启动时都输入它。

这就是我尝试引导我自己的 Facebook 帐户的方式,我在 Bootstrap.groovy 中有以下内容:

def adminRole = new AppRole(authority: 'ROLE_ADMIN').save(flush: true)
def userRole = new AppRole(authority: 'ROLE_USER').save(flush: true)

def testUser = new AppUser(username: 'facebook_563645402', enabled: true,
password: 'my-hashed-pw-here',
surveys: [jamies])
testUser.save(flush: true)

AppUserAppRole.create testUser, adminRole, true

作为记录,我添加了 hasMany对于上面提到的调查字段到 AppUser。

当我启动应用程序并尝试连接时,我收到以下错误:
URI
/web/j_spring_security_facebook_check
Class
grails.validation.ValidationException
Message
Validation Error(s) occurred during save(): - Field error in object 'web.AppUser' on field 'username': rejected value [facebook_563645402]; codes [web.AppUser.username.unique.error.web.AppUser.username,web.AppUser.username.unique.error.username,web.AppUser.username.unique.error.java.lang.String,web.AppUser.username.unique.error,appUser.username.unique.error.web.AppUser.username,appUser.username.unique.error.username,appUser.username.unique.error.java.lang.String,appUser.username.unique.error,web.AppUser.username.unique.web.AppUser.username,web.AppUser.username.unique.username,web.AppUser.username.unique.java.lang.String,web.AppUser.username.unique,appUser.username.unique.web.AppUser.username,appUser.username.unique.username,appUser.username.unique.java.lang.String,appUser.username.unique,unique.web.AppUser.username,unique.username,unique.java.lang.String,unique]; arguments [username,class web.AppUser,facebook_563645402]; default message [Property [{0}] of class [{1}] with value [{2}] must be unique]

这似乎提示用户名不是唯一的。

如果尝试引导某些数据破坏了对 facebook 用户名的唯一约束, 我怎么可能为用户预先定义任何数据 ?

快速谷歌搜索提出了一些建议( link1Grails spring security bootstrap ,但到目前为止他们没有帮助,有什么想法吗?

编辑 :
深入研究 grails 报告的错误,我可以看到上述错误的根源位于 DefaultFacebookAuthDao ,第 135 行,其中提到以下内容:
AppUserDomainClazz.withTransaction {
appUser.save(flush: true, failOnError: true)
}

因此,通过身份验证,spring security 尝试保存用户域对象......

编辑 2 :

这是我的 Bootstrap.groovy
def testUser = new AppUser(username: 'facebook_563645402', enabled: true,
password: 'my-hashed-pw', surveys: [new Survey(1)])
testUser.save()

def fbUser = new FacebookUser(uid: 563645402)
fbUser.save(flush: true)

两个 FacebookUserAppUser通过 spring security facebook quickstart 生成,唯一的变化是添加 static hasMany = [surveys: Survey]给 AppUser。

最佳答案

看起来数据已经被预定义了,否则就不会有唯一的约束违规。只需检查数据是否存在并仅在需要时创建它:

def adminRole = AppRole.findOrSaveByAuthority('ROLE_ADMIN')
def userRole = AppRole.findOrSaveByAuthority('ROLE_USER')

String username = 'facebook_563645402'

if (!AppUser.findByUsername(username)) {
def testUser = new AppUser(username: username, enabled: true,
password: 'my-hashed-pw-here')
testUser.addToSurveys(jamies)
testUser.save()

AppUserAppRole.create testUser, adminRole, true
}

关于facebook - 当涉及 spring security facebook 时,使用虚拟数据引导 grails 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14675861/

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