2017-11-01 7 views
0

は私がomniauth宝石を使用してInstagramのログインを実装しています...私は、私はかなりの時間のための答えを見つけることができていない問題を抱えているRailsの5

を後者の反復でインスタンス変数をキープしかし、このWebアプリケーションに特に必要な電子メールやユーザーの年齢など、Instagramが提供する情報には限界があります。

私がしようとしているのは、すべての可能なデータをInstagramから取得し、ユーザーを別のビューにリダイレクトして、年齢と電子メールの両方を提供できることです。

私はユーザーのデータを共有する必要があるコントローラを2つ使用していますが、2番目のコントローラメソッドでこの変数の内容を使用する必要がある場合、varはNilに設定され、再構築に使用できるメソッドはありませんそのデータは実際にデータベースに保存されていません。ここで

は、いくつかのコードです:ここで

class SomeOAuthController < Devise::OmniauthCallbacksController 

... 

#This controller retrieves the oauth data and has a view to retrieve all the extra data. 
def instagram 
    @user_ig = User.from_omniauth_instagram(request.env["omniauth.auth"]) 

    if @user_ig.provider != :instagram.to_s 
    redirect_to root_path 
    end 

end 

#Método para completar el registro de instagram 
def create_instagram_user 

    p 'entro a create_instagram_user' 
    p @user_ig 
    #@user_ig.adult = params[:user][:adult] 
    #@user_ig.email = params[:user][:email] 

end 

... 

は、Instagramの方法のための図である。

<%= form_for(@user_ig, url: {action: :create_instagram_user}) do |f| %> 


    <div class="field"> 
    <%= f.label :email %><br /> 
    <%= f.email_field :email, autofocus: true %> 
    </div> 

    <div class="field"> 
    <%= f.label :adult %> 
    <%= f.check_box :adult %> 
    </div> 

    <div class="actions"> 
    <%= f.submit t('bulula.session.sign_up') %> 
    </div> 

ので、それを包む:

問題

instagramメソッドで埋め込まれた変数を、instagramのビューボタンを送信してデータベースに保存せずに呼び出すことによって呼び出されるcreate_instagram_userメソッドで使用するには、変数Nilを使用しないでください。私は私がInstagramのから取得し、不完全なコンテンツを保存し、データをユーザにそれに沿って移動することができます一時データベーステーブルを作成するために期待していた、ここで任意の解決策を見つけることができない場合には

回避策ソリューション

フォームから提供し、新しいユーザーを作成します。

これはややこしいと思われますが、私はそれには完全に満足していません。

ありがとうございました!次のようにそれを行うには

答えて

1

一つの方法は、必要とされる情報を保存し、後で使用するためにそれを取得するにcookiesを利用することである。

class SomeOAuthController < Devise::OmniauthCallbacksController 
    def instagram 
     @user_ig = User.from_omniauth_instagram(request.env["omniauth.auth"]) 

     if @user_ig.provider != :instagram.to_s 
      redirect_to root_path 
     else 
      # store the values that you would need in the subsequent request 
      cookies[:instagram] = { 
       key1: @user_ig.value1, 
       key2: @user_ig.value2, 
       key3: @user_ig.value3, 
      } 
     end 
    end 

    def create_instagram_user 
     @user_ig = {} 
     @user_ig['key1'] = cookies[:instagram][:key1] 
     @user_ig['key2'] = cookies[:instagram][:key2] 
     @user_ig['key3'] = cookies[:instagram][:key3] 
     @user_ig['adult'] = params[:user][:adult] 
     @user_ig['email'] = params[:user][:email] 
     # create instagram user with the @user_ig info 
     cookies.delete(:instagram) # some housekeeping 
    end 
end 

cookies[:instagram]の代わりに、あなたはまた、使用することができcookies.signed[:instagram]またはcookies.encrypted[:instagram]より安全なものにする。

の使用の詳細については、Cookiesを参照してください。

+0

私は恐れています 'key1'、 'key2'、 'key3'はCookieが保存されないようにします –

関連する問題