весенняя проблема безопасности с использованием граалей - PullRequest
0 голосов
/ 16 июля 2011

Я новичок в Grails и ядре плагина безопасности Spring, но столкнулся с проблемой

ОШИБКА GrailsExceptionResolver - другой объект с таким же значением идентификатора уже был связан с сеансом: [nayax.SecUserSecRole #nayax.SecUserSecRole: null]

мой код:

NayaxUser populateDataFromJson(def user) {
    //todo: HANDLE CASES OF CREATING ROLES FOR USER AND REAUTHENTICATE THEM
    println "#### In FUNCTION ####"
    Facebook existingProfile = Facebook.findByFid(user.id)
    if (existingProfile) {
        println "### User already present in the database ####"
        existingProfile.setUser(existingProfile.user)

        //todo: CREATE ROLE AND REAUTHENTICATE USER
        SecRole secRole1 = SecRole.findByAuthority(SecRoleConstants.ROLE_USER)
        SecUserSecRole.create(existingProfile.user, secRole1)

        //todo: REAUTHENTICATE USER
        springSecurityService.reauthenticate(existingProfile.user.username)

        existingProfile.user.merge()
        return existingProfile.user
    }
    else {
        Facebook facebookObj = new Facebook(fid: user.id, lastLogin: new Date(), creationDate: new Date()).save(flush: true)
        NayaxUser nayaxUser = new NayaxUser(facebookUrl: user.link, fullName: user.name, facebook: facebookObj, username: user.email, password: springSecurityService.encodePassword("pleaseChangeMe"), enabled: true)
        if (nayaxUser.save(flush: true)) {
            println "### WORK DONE , saved user and save the user in session ###"
            facebookObj.setUser(nayaxUser)

            //todo: CREATE ROLE AND REAUTHENTICATE USER
            SecRole secRole = SecRole.findByAuthority(SecRoleConstants.ROLE_USER)
            SecUserSecRole.create(nayaxUser, secRole)

            //todo: REAUTHENTICATE USER
            springSecurityService.reauthenticate(nayaxUser.username)

            nayaxUser.merge()
            return nayaxUser
        }
        else {
            println "### ERROR IN VALIDATING DATA So NOT SETTING THE USER IN SESSION ####"
            nayaxUser.errors.allErrors.each { error ->
                println("### ERROR IS ${error} ####")
            }
            return nayaxUser
        }
    }
}

На самом деле, когда я вхожу в систему с помощью кнопки facebook, а затем выхожу из моей реализации и затем снова захожу, быстро, затеместь исключение, но после выхода я обновляю страницу несколько раз, проблема исчезает.Я думаю, что-то не так с моей реализацией выхода из Facebook или что-то в коде ???

Любые предложения приветствуются ..

1 Ответ

0 голосов
/ 16 июля 2011

Попробуйте использовать Facebook javascript api для выхода из системы, прежде чем вызывать контроллер выхода из системы для очистки сеанса и т. Д. Например:

if facebook user exists
  logout facebook user with fb js api
  js redirect to logout controller  
else
  redirect user to logout controller

Эта логика должна применяться во внешнем интерфейсе вашего приложения, предполагая, что если нетПользователь facebook, пользователь будет перенаправлен непосредственно на контроллер выхода из системы.

У меня проблемы с выходом из Facebook с использованием java и php api из приложения fb, но таким образом я преодолеваю эти проблемы.

...