2009-07-24 10 views
17

私はRailsに簡単なOAuthコンシューマアプリケーションを作成しようとしています。私は認証を処理するためにAuthlogicを使用しており、oauthを行うAuthlogic OAuthプラグインを使用しています。AuthlogicとAuthlogic OAuthプラグインを使用した暗黙のユーザー作成

oauthプラグインは、oauth_login_buttonとoauth_register_buttonのサインインボタンを表示するための2つのヘルパーを提供します。 Authlogicロジックとプラグインのリクエストフィルタとともに、これらの2つのボタンが何らかの形でセッション/ユーザを作成します。

次は、次のようになります。 - oauth_login_buttonヘルパーを使用すると、ローカルにそのようなユーザーが存在しないため、セッションオブジェクトが保存されません。 - oauth_register_buttonヘルパーを使用すると、最初のログイン後にログインすると、Railsはトークンがすでに取得されていると訴えます。つまり、同じユーザーの2番目のコピーを作成できません。

問題は次のとおりです。自分のサイトに両方の[登録とログイン]ボタンがありません。

私が達成したいのは、スタートページの1つのボタンであり、スムースです。 「Twitterでサインインする」のように、ユーザーがクリックしてサイトの内側のページに進む必要があります。

ユーザーが初めて自分のサイトにアクセスした場合は、サーバー側でローカルのユーザーアカウントを暗黙的に作成する必要があります。

これを行う方法に関するヒント?

私はサインインのための唯一つのボタンを持つ気にしていないようです見つけることができたAuthlogic + OAuthの上のすべてのサンプル。:(

答えて

11

私は質問を自分自身に答えるつもりのように思えます。

私は(HAMLに)サイン・インボタンを生成するために、次のコードを使用します。

- form_tag({:controller => "users", :action => "create"}, {:method => "post"}) do 
    = oauth_register_button :value => "Sign In with Twitter" 

およびユーザーがすでに存在する場合、私は単純に、がUserControllerクラスの作成方法では、ユーザーのセッションオブジェクトを作成します:

def create 
    @user = User.new(params[:user]) 
    @user.save do |result| # LINE A 
    if result 
     flash[:notice] = "Account registered!" 
     redirect_to some_inner_path 
    else 
     unless @user.oauth_token.nil? 
     @user = User.find_by_oauth_token(@user.oauth_token) 
     unless @user.nil? 
      UserSession.create(@user) 
      flash.now[:message] = "Welcome back!" 
      redirect_to some_inner_path   
     else 
      redirect_back_or_default root_path 
     end 
     else 
     redirect_back_or_default root_path 
     end 
    end 
    end 
end 

ユーザーが初めての訪問者であれば、ユーザーオブジェクトはLINE Aに正常に保存されます。そうでなければ、使用可能なoauthトークンがある場合は、DBからユーザーをフェッチしてログに記録します彼/彼女のインチ

+0

ちょうど私が探していたもの。ありがとうございました –

+0

これは非常に役に立ちます – Anurag

+0

:) –

関連する問題