Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Как узнать, вошел ли пользователь в систему (в GSP)

Автор вопроса: FustigadorОтветов: 3

У меня есть index.gsp, который представляет страницу. На этой странице есть кнопка для регистрации и кнопка для входа в систему. После того, как вы вошли в систему, если вход в систему выполнен правильно, приложение снова перенаправит вас на index.gsp. Мне нужно, чтобы, если пользователь вошел в систему, эти кнопки исчезли, а вместо этого сказали "Привет, [имя пользователя]". Я пробовал с этим кодом, но он не работает (он никогда не входит в систему):

В контроллере:

def dologin(){

    def user=Usuario.findByUsernameAndPassword(params.username,springSecurityService.encodePassword(params.password) )

    if(user){
        redirect (controller:'usuario', action:'index')
    }else{

        flash.message=message(code:'default.user.not.found', args:[message(code: 'params.username', default:'Usuario'), params.id])
    def userlogged = springSecurityService.getCurrentUser()
                render view: 'index', model: [user: user]
}

}

В index.gsp (не полный, только важная часть):

<sec:ifNotLoggedIn>

<div id="buttons">
    <div id="login"><a href="loginurl">Login</a>
    </div>
    <div id="register"><a href="registerurl">Registrarse</a>
    </div>
</div>
</sec:ifNotLoggedIn>
<sec:ifLoggedIn>

<div id="greet">Hello!</div>

</sec:ifLoggedIn>

Любая помощь будет оценена по достоинству.

Спасибо.

grailsspring-securitygsp

Ответы

Ответ 1 · рейтинг 13 · ataylor

Похоже, вы выполняете собственную аутентификацию, а не проходите процесс аутентификации безопасности spring. Тег <sec:ifLoggedIn> полагается на безопасность Spring, обрабатывающую аутентификацию.

Обычный способ обработки этого в весеннем приложении безопасности - отправка запроса на вход в /j_spring_security_check, который за кулисами фильтруется UsernamePasswordAuthenticationFilter.

Grails и подключаемый модуль безопасности Spring делают это относительно безболезненным, предоставляя LoginController и auth.gsp, которые можно использовать в качестве отправной точки. Запустите скрипт s2-quickstart (который также создает объекты домена пользователя и роли) или просто скопируйте их из каталога шаблонов spring-security-core.

Ответ 2 · рейтинг 1 · asroboy

я пробовал просто

<sec:ifNotLoggedIn> // DO SOMTHING</sec:ifNotLoggedIn>
<sec:ifLoggedIn> // DO SOMTHING</sec:ifNotLoggedIn>

Ответ 3 · Fustigador

В итоге сделал просто

<g:if test="${session.user==null}">
<!-- Display buttons-->
</g:if>
<g:if test=${session.user!=null">
    <div id="greet"> Hello, ${session.user.username}!</div>
</g:if>

Думаю, проще. Но спасибо за ответ, ataylor.

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы