如何在成功登录轨道设计和验证用户==后重定向页面"teachers"



我想在成功登录后重定向到特定页面。任何人都可以建议我验证后如何重定向(用户ID ==老师(。如果用户 id 是教师,则重定向到教师页面,否则重定向到学生页面。

pbl01/config/routes.rb

Rails.application.routes.draw do
  devise_for :users, :controllers => {
    :registrations => 'users/registrations'
  }
  resources :import,only: [:index,:create]
  root 'root#index'
  # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html
end

pbl01/app/controllers/users/sessions_controller.rb

class Users::SessionsController < Devise::SessionsController
  def new
  end
  def create
    @user = User.new(user_params)
    if @user.save
      @userid = User.find_by(userid:params[:userid])
      if @userid.userid == 'teacher'
        redirect_to root_path
      else
       redirect_to timesset_path   
      end
    else
      flash[:notice] = "Invalid Username or Password"
      flash[:color]= "invalid"
      render "new"  
    end
  end
end

pbl01/app/models/user.rb

require 'csv'
class User < ApplicationRecord
  validates :userid, :presence => true,
  validates :password, :presence => true,
  devise :database_authenticatable, :registerable,
       :recoverable, :rememberable, :trackable, :validatable
  def email_required?
    false
  end
  def self.import(file)
    CSV.foreach(file.path, headers: true) do |row|
      users = find_by(userid: row["userid"]) || new
      users.attributes = row.to_hash.slice(*updatable_attributes)
      users.password= row["password"]
      users.save!
    end
  end
  def self.updatable_attributes
    ["userid", "name", "email"]
  end
end

pbl01/app/views/devise/sessions/new.html.erb

<h2>Log in</h2>
<%= form_for(resource, as: resource_name, url: session_path(resource_name)) do |f| %>
  <% if @user.errors.any? %>
    <div class="field">
      <%= f.label :userid %><br />
      <%= f.text_field :userid, autofocus: true %>
    </div>
    <div class="field">
      <%= f.label :password %><br />
      <%= f.password_field :password, autocomplete: "off" %>
      <% for message_error in @user.errors.full_messages %>
        <li>* <%= message_error %></li>
      <% end %>
    </div>
    <% if devise_mapping.rememberable? -%>
      <div class="field">
        <%= f.check_box :remember_me %>
        <%= f.label :remember_me %>
      </div>
    <% end -%>
    <div class="actions">
      <%= f.submit "Log in" %>
    </div>
  <% end %>
  <%= render "devise/shared/links" %>

您可以使用Devise的after_sign_in_path_for(resource(方法。

def after_sign_in_path_for(resource)
 if resource.userid == 'teacher'
    teacher_path(resource.id)
 else
    student_path(resource.id)
 end
end

我建议你为位置添加一个列(如果是学生或老师(。通过这种方式,您可以轻松地对成功的登录用户进行排序,并将其重定向到应有的相应页面。

相关内容

最新更新