我有设计和 OmniAuth-Twitter 设置。我以前使用Devise的电子邮件注册,然后我切换到Twitter登录。现在我需要禁用电子邮件注册并为每个人登录访问权限。
http://localhost:3000/register
http://localhost:3000/login
我在视图中尝试了下面的代码,但是我收到错误。我假设因为它是ActiveRecord功能。
redirect_to root_path
我无法在Controller中重定向为 before_action:,因为我没有Devise的控制器。
禁止访问此注册表和登录页面的最佳方法是什么?
谢谢!
答案 0 :(得分:1)
如果您真的想从登录页面和注册页面重定向,则应创建两个扩展Devise::SessionsController
和Devise::RegistrationsController
的控制器,然后配置您的路由以使用您的控制器而不是设计的默认控制器使用
以下是登录路径的示例,但注册逻辑相同。
# config/routes.rb
devise_for :users, controllers: { sessions: 'users/sessions' }
# app/controllers/users/sessions_controller.rb
module Users
class SessionsController < Devise::SessionsController
def new
# Redirect wherever you want here
redirect_to root_path
end
end
end
请注意,设计允许您跳过某些路线,但请记住,将排除整个控制器,这可能不是您想要的。
# config/routes.rb
devise_for :users, only: [:passwords]
# or
devise_for :users, skip: [:sessions]
答案 1 :(得分:0)
您不一定需要控制器逻辑,您需要从视图端阻止该功能。您需要修改appname/app/views/devise/registrations/new.html.erb
和appname/app/views/devise/sessions/new.html.erb
以删除要隐藏的表单字段,并删除appname/app/views/devise/shared/_links.html.erb
中的内容以及禁止注册。
您希望删除共享_links.html.erb
文件中与第8-10行和第12-14行相似的代码。
1 <%- if devise_mapping.omniauthable? %>
2 <%- resource_class.omniauth_providers.each do |provider| %>
3 <div class="twitter-button">
4 <%= link_to "Sign in with #{OmniAuth::Utils.camelize(provider)}", omniauth_authorize_path(resource_name, provider), class: "twitter-text" %>
5 </div>
6 <% end -%>
7 <% end -%>
8 <%- if controller_name != 'sessions' && false %>
9 <%= link_to "Log in", new_session_path(resource_name), class: "forget" %>
10 <% end -%>
11
12 <%- if devise_mapping.registerable? && controller_name != 'registrations' && false %>
13 <%= link_to "Sign up", new_registration_path(resource_name), class: "forget" %>
14 <% end -%>
但是,在一天结束时,我不认为完全禁止那些没有Twitter的人来使用你的应用程序是一个好主意,因为它大大减少了现在可以立即使用您的应用程序的人数。