Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails sRails 5在路径中签名后设计_Ruby On Rails_Ruby_Devise - Fatal编程技术网

Ruby on rails sRails 5在路径中签名后设计

Ruby on rails sRails 5在路径中签名后设计,ruby-on-rails,ruby,devise,Ruby On Rails,Ruby,Devise,我有一个Rails 5应用程序和Desive。每个用户都有一个角色id,在创建时为其分配一个角色。我试图使用designe提供的after_sign_in_path_for方法根据角色重定向到登录时的特定页面 下面是我到目前为止所做的,但当尝试注销一个禁用的用户时,它不起作用 class ApplicationController < ActionController::Base def after_sign_in_path_for(resource) case re

我有一个Rails 5应用程序和Desive。每个用户都有一个角色id,在创建时为其分配一个角色。我试图使用designe提供的after_sign_in_path_for方法根据角色重定向到登录时的特定页面

下面是我到目前为止所做的,但当尝试注销一个禁用的用户时,它不起作用

    class ApplicationController < ActionController::Base
   def after_sign_in_path_for(resource)
    case resource.role_id
      when Role.find_by(name: "admin").id
      root_path
      when Role.find_by(name: "disabled").id
      destroy_user_session_path
      else
      super
    end
  end
end
销毁用户会话路径正在发出[GET]/users/sign\u请求

您可以使用注销或重置会话功能直接删除会话


希望这个答案对您有用。

使用Desive的sign\u outresource方法,而不是destroy\u user\u session\u路径。此方法将破坏用户会话。

您可以检查mySessionsController中的角色创建,如果角色无效,则阻止登录,而不是允许用户登录然后注销

def create 
 unless current_user.role_id == Role.find_by(name: "disabled").id 
  super set_login_token 
 else 
  redirect_to new_user_session_path, alert: "You can't log in"    
  end 
end
您还可以使用活动\u进行\u身份验证?在用户模型中使用非活动的消息方法来阻止他登录。在/app/models/user.rb中:


使用sign_outresource会导致异常引发undefined方法,以_model'为true:TrueClass`调用my_sessions_控制器中的create操作,我已设置该控制器以设置登录令牌以限制并发会话。我会将控制器添加到我的原始问题中,以便您可以查看。注销方法不应调用会话\u controllercreate。您确定没有覆盖任何其他帮助程序中的注销方法吗?根据您的问题,如果不需要,为什么要在用户中签名。如果您的用户角色已禁用,请不要在用户中登录。您可以在自定义会话控制器的create方法中执行此操作。我的应用程序中的任何其他帮助程序都不会覆盖sign_out方法。您能否详细说明我将如何在自定义会话控制器创建操作中拒绝禁用的用户角色?谢谢您的回答,如果我检查角色,在创建方法中会是什么样子?到目前为止,这是我想出的,它没有正常工作。def create EXCENT current_user.role_id==role.find_byname:disabled.id super set_login_token end add else重定向_至new_user_session_路径,警告:您无法登录end是否可以编辑您的答案以在此处显示正确的控制器方法,而不是注释中的片段?谢谢谢谢,重写create方法不起作用,用户无法登录。在user.rb中设置模型方法为我提供了所需的功能。非常感谢,我接受你的回答。
def create 
 unless current_user.role_id == Role.find_by(name: "disabled").id 
  super set_login_token 
 else 
  redirect_to new_user_session_path, alert: "You can't log in"    
  end 
end
def active_for_authentication?
 super and self.role_id != Role.find_by(name: "disabled").id 
end

def inactive_message
 "You can't log in"
end