Pero ahora queremos añadir un inicio de sesión personalizado, como el ID de estudiante en lugar del correo electrónico. Para este ejemplo usaremos:studentid
Primero vamos a añadir autenticación al Modelo de Usuario para que podamos permitir que studentid sea la verificación para iniciar la sesión de un usuario añadiendo :authentication_keys:

123456789classUser<ApplicationRecord# Incluye módulos de dispositivos por defecto. Otros disponibles son:# :confirmable, :bloqueable, :timeoutable y :omniauthable valida :studentid, numericality:{ only_integer:true}, presence:true, length:{ is:6} idear :database_authenticatable,:registerable,:recoverable,:rememberable,:trackable,:validatable,:authentication_keys=>[:studentid]end
rubí
A continuación vamos a entrar en nuestro ApplicationController para permitir las entradas de los estudiantes cuando se registren, así como otros atributos del dispositivo:
1234567891011121314151617181920classApplicationController<ActionController::Base# Prevenir ataques CSRF levantando una excepción.# Para las APIs, puede que quieras usar :null_session en su lugar. protect_from_forgery with::exception before_action :configure_permitted_parameters,if::devise_controller?protectedefafter_sign_in_path_for(users) grid_index_path enddefconfigure_permitted_parameters devise_parameter_sanitizer. permit(:sign_up){|u| u.permit(:studentid,:email,:password,:password_confirmation,:remember_me)} devise_parameter_sanitizer.permit(:sign_in){|u| u. permit(:studentid,:password,:remember_me)} devise_parameter_sanitizer.permit(:account_update){||u| u.permit(:studentid,:email,:password,:password_confirmation,:current_password)}endendend
rubí
def after_sign_in_path_for(users) te permitirá redirigir a los usuarios después de iniciar sesión en tu página de inicio. En este caso mi página de inicio es: grid_index_path
Ahora necesitaremos incluir esto en nuestro archivo routes.rb.
12345678Rails.application.routes.draw do devise_for :users, controllers:{ registrations: "registrations"} as :userdo get $0027/$0027=>$0027devise/registrations#new$0027end mount ActionCable.server =>"/cable" resources :gridend
rubí
Aquí especificaremos que al visitar nuestro sitio un usuario será enviado a crear una nueva cuenta a través de $0027devise/registrations#new$0027. También puede enviarles a otros lugares cambiando la ruta. Por ahora ignora el Monte del Cable de Acción pero lo necesitaremos para más adelante!
A continuación, iremos a nuestras vistas para el diseño para añadir nuestro registro personalizado.
Primero, cambie el nuevo archivo .html.erb en vistas/disposiciones/registros añadiendo un campo para nuestro nuevo inicio de sesión personalizado:
1234<div> <%= f.label :studentid, $0027Colorado College ID$0027 %;<br/> <%= f.text_field :studentid, autofocus: true %;
jsx
El archivo completo se verá ahora así:
1234567891011121314151617181920212223242526272829303132333435<h2;Regístrate</h2;<%=form_for(resource,as: resource_name, url:registration_path(resource_name))do|f|%;<%= devise_error_messages! f.label :studentid, $0027Colorado College ID$0027 %;|;br/;br/;br/;br/;br/;br= f.text_field :studentid, autofocus: true %;|;br/;br/;br/;div; ;%= f. label :email %{{[br]}; <%= f.email_field :email%{{[#]}; </div{{{[#]};{[#]} {[#]} {[#]} {[#]}}. label :password %> <% si @minimum_password_length %> <em>(<%= @minimum_password_length %> caracteres mínimos)</em> <% end %>br/> <%= f.password_field :password, autocompletar: "off" %> </div>br br br br; div; <%= f.label :password_confirmation %>br/> <%= f.password_field :password_confirmation, autocomplete: "off" %{{{[#]}; </div{{{[#]}; br{[#]}; div{{[#]}; f.submit{[#]}"Sign up" %{{[#]}; </div{{{[#]}; end{{[#]}; %= rendir{[#]}"idear/compartir/enlazar" %{{[#]}". jsxAhora también tendremos que cambiar el archivo new.html.erb en views/devise/sessions
1234567891011121314151617181920212223242526<h2;Log in</h2;<%=form_for(resource,as: resource_name, url:session_path(resource_name))do|f|%;<div> <%= f. label :studentid, $0027Colorado College ID$0027 %><br/> <%= f.text_field :studentid, autofocus: true %> </div>div; <%= f.label :password %>br/> <%= f.password_field :password, autocomplete: "off" % ; %;/div. % si idear_mapping.rememberable?- f.check_box :remember_me %________; <%= f.label :remember_me %________; </div>%= end -%%;|div; <%= f.submit "Log in" %________;jsx
Ahora es el momento de agregar esto a nuestra mesa y re-migrar:
123456789101112131415161718192021222324252627282930313233classDeviseCreateUsers<ActiveRecord::Migration[5.0]defchange create_table :usersdo|t|## Base de datos autentificable t.integer :studentid, null:false t. string :email, null:false, default:"" t.string :encrypted_password, null:false, default:""## T.string recuperable :reset_password_token t.datetime :reset_password_sent_at## Recordable t. datetime :remember_created_at## Trackable t.integer :sign_in_count, default:0, null:false t.datetime :current_sign_in_at t.datetime :last_sign_in_at t.inet :current_sign_in_ip t.inet :last_sign_in_ip t. timestamps null:falseend add_index :users,:email, unique:true add_index :users,:reset_password_token, unique:true# add_index :users, :confirmation_token, unique: true# add_index :users, :unlock_token, unique: trueendendrubí
Puedes añadir validaciones aquí como quieras. Recomendaría añadir una validación única para que varios usuarios no tengan el mismo id o en otros casos, el nombre de usuario.
Ahora migre de nuevo:rake db:migrate
¡Grandioso! Hemos personalizado las opciones de inicio de sesión y habilitado el inicio de sesión. Ahora, configuraremos una conexión suscrita si un usuario ha iniciado sesión a través de Devise.
Primero asegúrate de que tienes el ActionCable viendo que tienes la carpeta app/channels. Después de eso, define una suscripción actualizando el archivo app/channels/connection.rb.
1234567891011121314151617181920moduleApplicationCableclassConnection<ActionCable::Connection::Base identificada_por :current_userdefconnectself.current_user = find_verified_user logger.add_tags $0027ActionCable$0027, current_user. studentid endprotecteddeffind_verified_user# esto comprueba si un usuario está autentificado con deviseif verified_user = env[$0027warden$0027].user verified_user else reject_unauthorized_connection endendendrubí
Esto le permitirá comprobar el usuario actual de la página y verificar que el usuario está conectado. Si es así, el usuario se convierte en un suscriptor válido. Claramente Devise y ActionCable funcionan bien juntos cuando se trata de la autenticación y el seguimiento de usuarios.