4

私は Omniauth を唯一の認証として使用していますが:database_authentication、私のモデルにはありません。この gem を使用して Atlassian Crowd からログインしたい: https://github.com/robdimarco/omniauth_crowd

この gem は標準の Crowd ログイン フォームを使用していますが、これは望ましくありません。同じように動作するカスタム フォームを作成したいのですが、ログイン ページ全体 (「Crowd でサインイン」なし) またはそのようなもの、Crowd にログインするフォームだけを置き換えます。

これを行うためにconfig.omniauth、devise.rb の行に次のオプションを追加しました。

:form => Devise::SessionsController.actions(:new)

私がオンラインで見ることができるものから、そのRackエンドポイントを使用してカスタムフォームを表示します. app/views/devise/sessions/new.html.erb の html を、次のフォームを含む new.html.haml に変更しました。

= simple_form_for @user, :url => user_omniauth_authorize_path(:crowd) do |f|
  = f.input :username, :input_html => { :name => 'username' }
  = f.input :password, :input_html => { :name => 'password' }
  = f.button :submit

デフォルトの OmniAuth フォームを模倣することを望んでいます。:form問題は、devise.rbのオプションを使用して users/auth/crowd にアクセスすると、次のエラーが発生することです。

Could not find devise mapping for path "/users/auth/crowd".

Deviseを使用する場合、このようなOmniAuthのカスタムフォームを提供する方法はありますか?

編集:ルートは次のとおりです。

devise_for :users, :controllers => { :omniauth_callbacks => 'users/omniauth' } do
  get 'login', :to => 'devise/sessions#new', :as => :new_user_session
  get 'logout', :to => 'devise/sessions#destroy', :as => :destroy_user_session
end

devise_scope :user do
  get '/users/auth/:provider', :to => 'users/omniauth#passthru'
  match '/users/auth/failure', :to => 'users/omniauth#failure'
end

resources :users

ここでいくつかのことを試しましたが、何もうまくいきませんでした。

4

2 に答える 2

3

これは遅いかもしれませんが、私は同じことをする必要がありました.これは将来誰かを助けるかもしれません. 私の場合、自社のクラウド サーバーと同じアカウントを使用する必要がある内部アプリケーションを開発していました。私が知る限り、私たちは自分たちの内部クラウド サーバーとのみ通信しているため、セキュリティ上の懸念はありません。アプリケーションの美学に合わせてログイン ページのスタイルを設定したかったのです。

omn​​iauth_crowd gem を追加し、Devise で設定すると、ルートは次のようになります。

user_omniauth_authorize    GET|POST    /users/auth/:provider(.:format)    authentication#passthru {:provider=>/crowd/}

私がしなければならなかったのは、デフォルトの omniauth_crowd がどのように機能するかを模倣するカスタムのデバイス セッション フォームを作成することだけでした。基本的に、ユーザー名とパスワードのパラメーターをサーバーに POST するだけです。カスタム デバイス ビューの作成については、https://github.com/plataformatec/devise#configuring-viewsで説明されています。

私のフォームは次のようになります。

<%= form_tag user_omniauth_authorize_path(:crowd) do %>
  <div><%= label_tag :username, "Username" %><br />
  <%= text_field_tag :username %></div>

  <div><%= label_tag :password, "Password" %><br />
  <%= password_field_tag :password %></div>

  <div><%= submit_tag "Sign in" %></div>
<% end %>
于 2014-06-11T20:58:29.163 に答える
0

あなたがやろうとしていることは完全に理解しています。しかし、多くの理由があるため、それを行うことを控えることをお勧めします. として

  1. omn​​iauth の基本的な概念は、人々が使い慣れた Web サイトからログインしていると信頼できるということです。
  2. そのページを削除して独自のページを追加すると、ユーザーは、同じことをする悪意のある理由があると考える可能性があります。

コメントするのに十分なリポジトリがないため、これを回答として書きました

于 2014-01-27T18:05:14.460 に答える