【问题标题】:Devise: Can't turn off require_no_authentication?设计:无法关闭 require_no_authentication?
【发布时间】:2013-12-24 19:48:18
【问题描述】:

当我尝试限制注册访问时,这似乎是不可能的。我试过了

class RegistrationsController < Devise::RegistrationsController
  skip_before_filter :require_no_authentication
end

在 app/registrations_controller.rb 中并将路由更改为

devise_for :accounts, :controllers => { :registrations => "registrations" }

这不起作用。任何建议我为什么以及我可以做什么/我应该看哪里将不胜感激。

编辑:

不起作用的意思是:当我在退出时尝试访问 /accounts/sign_up 时,它确实有效,但我应该被重定向到 sign_in。

解决方法:

class RegistrationsController < Devise::RegistrationsController
  skip_before_filter :require_no_authentication

  private

  def authenticate_account!(opts={})
    opts[:scope] = :account
    warden.authenticate!(opts) # if !devise_controller? || opts.delete(:force)
  end
end

这将删除跳过每个设计控制器身份验证的硬编码检查。代码来自lib/devise/controllers/helpers.rb

【问题讨论】:

  • 您设计了AccountUser 型号?
  • Account 是我放置设计内容的模型。注册、登录等工作正常,我只是无法按我的意愿限制访问。
  • 当您说“尝试限制访问”时,您到底想达到什么目的?什么是“不起作用”任何控制台错误或意外行为?
  • 我正在努力实现只有注册帐户的用户才能创建/注册新帐户。从我的角度来看,这应该是可能的。不起作用意味着意外行为:当我在退出时尝试访问 /accounts/sign_up 时,它确实有效,但我应该被重定向到 sign_in。
  • 不错的解决方法谢谢 :)

标签: ruby-on-rails authentication devise before-filter


【解决方案1】:

所以你想change after sign-out path

如果你还没有设置你的根来设计登录那么

class ApplicationController < ActionController::Base
  private

  # Overwriting the sign_out redirect path method
  def after_sign_out_path_for(resource_or_scope)
    new_user_session_path
  end
end

【讨论】:

  • 我不明白为什么我想跳过它时要重新定义它?
  • 对不起,但这不是我想做的。我不想更改注销后重定向的位置,我希望未登录的用户无法访问注册页面。
猜你喜欢
  • 2023-03-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-19
相关资源
最近更新 更多