0

私はDevitsOmniAuth-Twitter setupを持っています。私はDeviseで電子メールサインアップを使用していましたが、その後Twitterのログインに切り替えました。今私は電子メールのサインアップを無効にし、誰もがアクセスできるようにする必要があります。Rails 5:Deviseレジスタとログインフォームページへのアクセスを無効にする

http://localhost:3000/register 
http://localhost:3000/login 

私は以下のコードをビューで試しましたが、エラーが発生しました。私はそれがActiveRecord機能であると仮定します。

redirect_to root_path 

と私はbefore_actionとしてコントローラにリダイレクトすることができませんでした:私は考案するためのコントローラを持っていないので、

このレジスタとログインページへのアクセスを無効にするための最良の方法は何ですか?

ありがとうございました!

+0

ルートからブロックして、そのリンクをTwitterのログインページにリダイレクトする – 7urkm3n

答えて

0

それはあなたが見る側からその能力をブロックする必要があるということです、あなたはコントローラロジックを必要とするとは限らないのです。 appname/app/views/devise/registrations/new.html.erbappname/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を持っていない人々を許可しないように、必ずしも素晴らしいアイデアだとは思いません今すぐバットからあなたのアプリを使用することができます。

0

実際にログインページと登録ページからリダイレクトしたい場合は、Devise::SessionsControllerDevise::RegistrationsControllerの2つのコントローラを作成してから、Deviseが使用するデフォルトコントローラの代わりにコントローラを使用するようにルートを構成する必要があります。

はここでのみログインパスの例ですが、それは登録のために同じロジックです。

# 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] 
関連する問題