Ruby on Rails
Autentificación de usuario en rieles
Buscar..
Introducción
Devise es una gema muy poderosa, te permite registrarte, iniciar sesión y cerrar sesión justo después de la instalación. Además el usuario puede agregar autenticaciones y restricciones a sus aplicaciones. Devise también viene con sus propios puntos de vista, si el usuario desea utilizar. Un usuario también puede personalizar los formularios de registro e inicio de sesión según sus necesidades y requisitos. Debe tenerse en cuenta que Devise recomienda que implementes tu propio inicio de sesión si eres nuevo en los rieles.
Observaciones
En el momento de generar configuraciones de dispositivos, los rails generate devise:install
, el dispositivo mostrará una lista de instrucciones en la terminal a seguir.
Si ya tiene un modelo de USER
, al ejecutar este comando, los rails generate devise USER
agregará las columnas necesarias a su modelo de USER
existente.
Utilice este método auxiliar before_action :authenticate_user!
en la parte superior de su controlador para verificar si el user
ha iniciado sesión o no. Si no, entonces serán redirigidos a la página de inicio de sesión.
Autenticación utilizando Devise
Añadir gema al Gemfile:
gem 'devise'
A continuación, ejecute el comando de bundle install
.
Use el comando $ rails generate devise:install
para generar el archivo de configuración requerido.
Configure las opciones de URL predeterminadas para la aplicación de correo de Devise en cada entorno En el entorno de desarrollo agregue esta línea:
config.action_mailer.default_url_options = { host: 'localhost', port: 3000 }
a su config/environments/development.rb
de manera similar en producción, este archivo de config/environments/production.rb
edición y agrega
config.action_mailer.default_url_options = { host: 'your-site-url'}
Luego cree un modelo usando: $ rails generate devise USER
Donde USER
es el nombre de la clase para la que desea implementar la autenticación.
Finalmente, ejecute: rake db:migrate
y ya está todo listo.
Vistas personalizadas
Si necesita configurar sus vistas, puede usar los rails generate devise:views
que copiarán todas las vistas a su aplicación. A continuación, puede editarlos como desee.
Si tiene más de un modelo de Devise en su aplicación (por ejemplo, Usuario y Administrador), notará que Devise utiliza las mismas vistas para todos los modelos. Devise ofrece una manera fácil de personalizar las vistas. Establezca config.scoped_views = true
dentro del archivo config/initializers/devise.rb
.
También puede usar el generador para crear vistas con ámbito: los rails generate devise:views users
Si desea generar solo unos pocos conjuntos de vistas, como las del módulo registrable y confirmable, use el indicador -v: los rails generate devise:views -v registrations confirmations
Diseñar filtros de control y ayudantes
Para configurar un controlador con autenticación de usuario usando un dispositivo, agregue esto antes de la acción: (asumiendo que su modelo de dispositivo es 'Usuario'):
before_action :authenticate_user!
Para verificar si un usuario ha iniciado sesión, use la siguiente ayuda:
user_signed_in?
Para el usuario que inició sesión actualmente, use este ayudante:
current_user
Puede acceder a la sesión para este ámbito:
user_session
- Tenga en cuenta que si su modelo de Devise se llama
Member
lugar deUser
, reemplace eluser
anterior pormember
Omniauth
Primero elige tu estrategia de autenticación y Gemfile
a tu Gemfile
. Puede encontrar una lista de estrategias aquí: https://github.com/intridea/omniauth/wiki/List-of-Strategies
gem 'omniauth-github', :github => 'intridea/omniauth-github'
gem 'omniauth-openid', :github => 'intridea/omniauth-openid'
Puedes añadir esto a tu middleware de rieles así:
Rails.application.config.middleware.use OmniAuth::Builder do
require 'openid/store/filesystem'
provider :github, ENV['GITHUB_KEY'], ENV['GITHUB_SECRET']
provider :openid, :store => OpenID::Store::Filesystem.new('/tmp')
end
De forma predeterminada, OmniAuth agregará el /auth/:provider
a sus rutas y puede comenzar usando estas rutas.
De forma predeterminada, si hay un error, omniauth redireccionará a /auth/failure
has_secure_password
Crear modelo de usuario
rails generate model User email:string password_digest:string
Agregar el módulo has_secure_password al modelo de usuario
class User < ActiveRecord::Base has_secure_password end
Ahora puedes crear un nuevo usuario con contraseña.
user = User.new email: '[email protected]', password: 'Password1', password_confirmation: 'Password1'
Verifique la contraseña con el método de autenticación
user.authenticate('somepassword')
has_secure_token
Crear modelo de usuario
# Schema: User(token:string, auth_token:string)
class User < ActiveRecord::Base
has_secure_token
has_secure_token :auth_token
end
Ahora, cuando creas un nuevo usuario, un token y auth_token se generan automáticamente
user = User.new
user.save
user.token # => "pX27zsMN2ViQKta1bGfLmVJE"
user.auth_token # => "77TMHrHJFvFDwodq8w7Ev2m7"
Puedes actualizar los tokens usando regenerate_token
y regenerate_auth_token
user.regenerate_token # => true
user.regenerate_auth_token # => true