繁体   English   中英

如何在成功登录Rails设计时以及验证用户==“老师”后重定向页面

[英]How to redirect a page on successful sign in rails devise and after verify user== “teachers”

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM