0

このチュートリアルの後に、カスタムOmniAuthの設定Ruby on Rails

私が達成しようとしていることに関する情報を見つけるのに問題があります。

現在、私のレールアプリはカスタムユーザー認証を設定しています。また、ユーザーはデータベース内の役割文字列を持っており、アプリケーション内で何が表示され、実行できるかを判断するために使用されます。

 ROLES = %w[non-profit company person]    

    def role_symbols 
    [role.to_sym] 
    end 

登録フォームには、名前、メールアドレス、ユーザー名、パスワードを入力することができます。また、ユーザーの役割も選択する必要があります。

Signup.html.erb 
       <h3>Choose Account Type      </h3> 
    <%= f.input :role, :collection => User::ROLES.map { |s| [s.humanize, s] }, required: true, label: false, input_html: { class: 'input-md' } %> 

私の目標は、twitterとfacebook omniauthでサインアップすることです。 TwitterやFacebookでアカウントを作成するをクリックすると、ユーザーは自分の役割を選択できるようになります。現在のomniauthの設定私はカスタム選択を追加する方法について少し混乱しています。 TwitterアカウントやFacebookアカウントをリンクしてアカウントを作成する前に、ユーザーが役割を選択していることを確認する方法はありますか。

ご協力いただきありがとうございます。

答えて

0

oauthのフローを見てみましょう。この例ではFacebookを使用していますが、どのプロバイダでも使用できます。

  1. ユーザは/auth/facebookを指すログインリンクをクリックします。
  2. OmniAuthは認証ダイアログにリダイレクトしますhttps://www.facebook.com/dialog/oauth...
  3. ユーザーには、アプリケーションにアクセス許可を与えるよう求められます。彼らは受け入れるか拒否するかを選ぶことができます。ユーザーはアプリケーションにリダイレクトされます。
  4. 戻り値 "コールバック"はアプリケーションによって処理されます。通常これは/auth/callbacks/facebookになります。信用状とユーザー情報を含むハッシュを取得します。あなたがそれを使って何をやっているのか、そしてログイン後にあなたに任せているのはあなた次第です。

ユーザーがあなたに追加の詳細を提供したい場合は、サインイン後にユーザーをリダイレクトすることでこれを実現します。 ただし最初のユーザーアカウントを作成し、ユーザーは追加の詳細を提供できるようにする必要があります。技術的に証明書をどこかに隠すことは可能ですが、OAuthはそれだけで十分に複雑なので、認証フローに余計なステップを入れたくありません。

関連する問題