如果用户未在Devise中登陆,则重定向到注册页面。

7

从阅读设备代码和维基百科来看,如果用户没有登录,则似乎没有将用户重定向到注册页面的选项。在lib/devise/failure_app.rb中,重定向URL是硬编码的。

  def redirect_url
    opts  = {}
    route = :"new_#{scope}_session_path"
    opts[:format] = request_format unless skip_format?

    if respond_to?(route)
      send(route, opts)
    else
      root_path(opts)
    end
  end

我想问一下在完成工作时最佳实践是什么?我考虑手动设置"user_return_to"会话值,然后调用注册页面。这是一个好的做法吗?

2个回答

3

1
我不太理解那个维基页面,请你给我解释一下。因为我刚开始学习 Rails,所以请问如何在用户没有登录的情况下显示登录页面呢? - pahnin
该链接的文章有一个不同(更好)的链接,它会引导您到这里:https://github.com/plataformatec/devise/wiki/Redirect-to-new-registration-(sign-up)-path-if-unauthenticated - skplunkerin

0

使用最新的Devise,建议按照以下说明进行操作:

https://github.com/heartcombo/devise/wiki/Redirect-to-new-registration-(sign-up)-path-if-unauthenticated

为此,可以定义一个自定义失败应用程序,其中包含一个路由方法,返回表示要重定向到的已命名路由的符号:
# app/lib/my_failure_app.rb
class MyFailureApp < Devise::FailureApp
  def route(scope)
    :new_user_registration_url
  end
end

然后在 Devise 初始化器中,指定你的失败应用程序:

# config/initializers/devise.rb
config.warden do |manager|
  manager.failure_app = MyFailureApp
end

加载 lib 目录

config.autoload_paths << Rails.root.join('lib')

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接