Llevo unos días trasteando con Grails y descubriendo sus maravillas (y de paso las de Groovy). Me está gustando tanto que en unos días me pasaré por Madrid para asistir a Greach.
Creo que la única forma de aprender algo bien es utilizándolo, así que he empezado a desarrollar una aplicación en Groovy utilizando como framework Grails.
Es impresionante como sin tener que escribir a penas código tenemos una aplicación funcionando, con su gestión de usuarios, registro, login....
A continuación os dejo los pasos a seguir, desde la creación de la aplicación, para poner en marcha dos plugins de Grails: Spring Security Core y Spring Security UI
Este ejemplo está basado en la versión 1.3.7 de grails que debe estar previamente instalado.
Este ejemplo está basado en la versión 1.3.7 de grails que debe estar previamente instalado.
>c:\desarrollos\workspace
>grails create-app exampleApp
Instalamos los plugins:
>cd exampleApp
>grails install-plugin spring-security-core
>grails install-plugin mail
>grails install-plugin spring-security-ui
Creamos los objetos para usuario y role (en el paquete que queremos):
grails s2-quickstart com.exampleApp.security User Role
Para poder configurar las pantallas y temas de registro y usuarios:
grails s2ui-override layout
grails s2ui-override user com.exampleApp.security
grails s2ui-override register com.exampleApp.security
Configuramos el envío de correos. Para ello, introducimos las siguientes líneas en Config.groovy
// Configuration of the mail account
grails {
mail {
host = "smtp.gmail.com"
port = 465
username = "info.exampleApp@gmail.com"
password = "exampleAppPassword"
props = ["mail.smtp.auth":"true",
"mail.smtp.socketFactory.port":"465",
"mail.smtp.socketFactory.class":"javax.net.ssl.SSLSocketFactory",
"mail.smtp.socketFactory.fallback":"false"]
}
}
grails.mail.default.from="info.exampleApp@gmail.com"
Solo con hacer esto no funciona todo el proceso de registro y login. No se está desbloqueando al usuario a pesar de activar el registro desde el link que se envía por correo. Para corregirlo hacemos lo siguiente:
- Sobreescribir el método com.exampleApp.security.RegisterController.verifyRegistration
- Añadimos su implementación , la copiamos desde grails.plugins.springsecurity.ui.RegisterController
- Modificamos la siguiente línea:
//Add flush:true
user.save(flush: true)
Por otro lado, tanto el spring-core como el spring-core-ui están codificando el password. Por lo que una vez activado el usuario no es posible entrar en la aplicación. Para poder hacerlo, eliminamos los métodos: beforeInsert, beforeUpdate y encodePassword de com.exampleApp.security.User
Con estos sencillos pasos, tenemos nuestra aplicación funcionando correctamente con registro de usuarios, gestión de usuarios y roles, login, logout.... ¿Fácil verdad?
6 comentarios:
Hola, esta muy bueno tu post. Pero quería hacerte una consulta, resulta que yo estoy partiendo con Grails y necesito que me una página muestre información según el usuario logeado, por ejemplo si inicio con el usuario Y, solo me muestre la información que le corresponde a el, y asi con todos los usuarios, tu sabes ocmo hacerlo?
Buen trabajo! Y ha funcionado a la primera, eso se agradece! :D
me quede trabado en la parte de sobreescribir el metodo, en ningu momento me aparece com.exampleApp.security.RegisterController.verifyRegistration
Igual que ezequielk... todo fino y simple pero no explicaste bien el final y lo mas importante.
Igual que ezequielk y oscar... me ha faltado lo último y no he podido hacerlo. Tampoco entiendo por qué necesitas borrar el encodePassword.
Hola,
Los últimos pasos eran necesarios por la versión de Grails y la versión de los plugins con los que estaba trabajando en ese momento. Había un pequeño conflicto entre ellos (sin mal no recuerdo).
En versiones posteriores en las que he tenido que utilizalos no he tenido ningún problema y era suficiente con instalarlos y seguir los pasos de la docu,
Publicar un comentario