在控制器中验证用户,然后重定向

时间:2016-11-02 11:13:24

标签: ruby-on-rails ruby model-view-controller controller

我在projects_controller.rb

下面有以下代码
class Admin::ProjectsController < ApplicationController
before_filter :require_login

def require_login
  while (adminLogin != 'username')
    redirect_to admin_login_path and return
  end
end

这是application_controller.rb

下的内容
class ApplicationController < ActionController::Base

# Return the admin user
 def adminLogin
   @email = params[:email]
   @password = params[:password]
   return @email
 end
end

我正在尝试以该格式收到电子邮件并将其传递给项目控制器,以便在定义电子邮件时,管理员可以登录。当我按下表单上的提交按钮时,我可以看到正在发送的电子邮件通过在表单中​​使用<%= debug @email %>到项目控制器,但页面重定向到再次登录。那我怎么去/ projects?

[UPDATE]:

application_controller.rb

class ApplicationController < ActionController::Base
protect_from_forgery

# Return the admin user

def redirect_unless_admin
@email = params[:email]
password = params[:password]
if (@email == 'username')
  redirect_to admin_projects_path
else
   redirect_to admin_login_path
end

端 端

我在projects_controller.rb中要求使用此方法。这只是打破它,重定向太多次

2 个答案:

答案 0 :(得分:1)

如果你需要从ProjectsController调用adminLogin,它应该在ApplicationController中或在从ApplicationController派生的公共父类中定义。

答案 1 :(得分:1)

你应该能够在application_controller中使用它:

class ApplicationController < ActionController::Base
  def redirect_unless_admin
    email = params[:email]
    password = params[:password]
    if params[:email].present? && email == 'username'
      redirect_to admin_projects_path
    else
      redirect_to root_path
    end
  end
end

,这在admin / projects_controller中:

class Admin::ProjectsController < ApplicationController
  before_filter :redirect_unless_admin
end

这样,redirect_unless_admin方法可用于任何继承application_controller的控制器。您可以以任何方式自定义逻辑,以确定要使用哪个重定向,但这应该是一个很好的起点。