2017-01-13 10 views
0

facebookサインアップ認証に隠しフィールドを追加したいと思います。 Imはomniauth,deviseを使用しています。 Facebookのサインアップボタンをクリックしたときにフィールドを追加して、ユーザーが基本ユーザーかメンバーかを判断する方法を見つける必要があります。 link_toでは、別のフィールドを追加して、特定のコントローラまたはモデルに渡すことはできますか?facebookサインアップ認証によるhidden_​​fieldの追加

  • 私は、URLが「メンバー」の値でhidden_​​field user_typeを追加omniauth(:facebook)にリンクされてフォームを作ってみました最後の時間。

私のユーザーテーブルがmemberまたは 'basic-user'で更新されていない場合でも、以下はその試行例です。

<%= form_for(resource, :url => user_omniauth_authorize_path(:facebook)) do |h| %> 

    <%= h.hidden_field :user_type, value: 'member' %> 
    <%= h.submit "Sign Up With Facebook", class:"btn btn-primary2" %> 

<% end %> 

これは私のuser.rbモデル私はちょうどhidden fieldで作られたuser_typeデータを見つけることができます

def self.from_omniauth(auth) 

# anonymous_username = "NewUser#{User.last.id + 1}" 
generated_password = Devise.friendly_token[0,20] 

user = User.where(:email => auth.info.email).first 

if user 
    return user 
else 
    where(provider: auth.provider, uid: auth.uid).first_or_create do |user| 
    user.confirmed_at = Time.now 
    user.fullname = auth.info.name 
    user.provider = auth.provider 
    user.uid = auth.uid 
    user.email = auth.info.email 
    user.password = generated_password 
    if auth.info.image.present? 
    avatar_url = process_uri(auth.info.image) 
    user.avatar = URI.parse(avatar_url) 
    end 
end 

user.update_attributes username: "NewUser#{user.id}" 

    end 
end 
  • のですか?
  • resourceを私のフォームに使用する必要がありますか?私のノンフェイスブックカスタムフォームのように私は@userを使用しますか?

隠しフィールドからデータを取得することができない場合は、私はこれを行うことができます別の方法は何ですか?たぶん私はセッションを使用することができますが、私は実際に討論セッションの仕組みや、これを含むように編集することはできません。

答えて

1

私はあなたがフォームが必要と思わないです。あなたのフィールドは隠されているので、ユーザーが変更を期待しているわけではないので、リンクを渡すだけでfacebookで承認し、URLにparamsを追加することができます。

<%= link_to "Sign Up With Facebook", omniauth_authorize_path(:user, :facebook, user_type: 'member') %> 

次に、裏面にデータを送信すると、認証ハッシュで利用可能になります。

あなたが出て再び戻ってデータを取得するために auth.optionsを使用することができ、あなたのモデルでは

auth.params[:user_type] 
+0

私はこのエラー '未定義のメソッドが' []」nilのために得た:NilClass'これはしかし道よりよい解決策です!私はそれをすることができたことを知りませんでした!エラーについては、そのクラスの原因は? –

+0

オールド..私はこれをいつもやっています。あなたのモデルでomniauthメソッドを呼び出すomniauthコールバックコントローラでは、 'request.env [" omniauth.params "]'でraise/inspectを呼び出してみましょう。どこにどのように格納されているかを調べることができます。 – trh

+0

'RuntimeError({" user_type "=>" member "}):'私は 'raise request.env [" omniauth.params "]。inspect'を入れたときにエラーになります。 –

関連する問題