0

Omniauth を使用して、ユーザーに Facebook アカウントでサインアップさせています。彼らが最初に認証リンクをクリックすると、アプリケーションのアカウントをまだ持っていない限り、追加情報を入力するためのサインアップ ページに誘導します。

セッションコントローラー

 def create_facebook
        #make an environment variable
        auth = request.env['omniauth.auth']
        if User.find_by_provider_and_uid(auth["provider"], auth["uid"])
            user = User.find_by_provider_and_uid(auth["provider"], auth["uid"])
            session[:user_id] = user.id
            redirect_to lessons_path, flash[:notice] => "Signed in!"
        else
            #go to signup page to get additional info
            redirect_to new_user_path(:auth => auth) #problem
        end
  end

この場合、URL のパラメーターを使用して auth ハッシュ全体を渡しUser.create_with_omniauth(auth)ますUsers#new。私はそれを避けるべきですか?他の選択肢は何ですか?

4

1 に答える 1

0

私が見ることができるいくつかのアプローチがあります:

  • 認証値をユーザーのセッションに保存し (ただし、セッションはデフォルトで値を暗号化せず、署名するだけであることに注意してください)、新しいユーザー アクションを表示するときにそれらを引き出します。

または:

  • 新しいユーザー アクション コードを直接呼び出すだけです (ヘルパー経由で共有するか、同じコントローラー上にある場合は、アクションを呼び出してから、呼び出しrenderて正しいビューを設定するようにしてください)。

セッションアプローチに似ているが、もう少し重い3番目のより堅牢な代替手段:

  • このステップで得た情報を使用してユーザーを設定します (そして、ある種の「部分的に登録された」状態に設定します)。サインインします。次に、new_user アクションを表示するときに、既存のデータを読み込んでいることを確認してください。この状態のユーザーがどこにいてもサインアップ ページに常にリダイレクトされるように、ルーティング レイヤーを設定することもできます。
于 2013-01-27T00:36:29.857 に答える