2

Rayan Bates http://railscasts.com/episodes/170-openid-with-authlogicソースをベースにして遊んでいました。

そのため、Google、Yandex、OpenID などの OpenID プロバイダー用のアイコンをいくつか作成し、ユーザーは使用するものを選択する必要があります (ここのスタックオーバーフローと同様)。だからすべてが大丈夫です。ここで、ログインまたは登録を 1 回クリックするだけにすることにしました。ユーザーがアイコンをクリックすると、Authlogic は新しいユーザーを作成して認証するか、ユーザーが存在する場合は認証するだけです。そこで、User#create で変更ロジックに結び付けました。

class UsersController < ApplicationController      
  def create
    @user = User.new(params[:user])
    @user.save do |result|
      if result
        redirect_to root_url
      else
        @user_session = UserSession.new(:openid_identifier => @user.openid_identifier)
        @user_session.save
        redirect_to root_url
      end
    end
  end
end

そのため、ユーザーを保存できない場合、Authlogic はそのユーザーを認証しようとします (もちろん、同じ openid_identifier を持つ別のユーザーが存在する場合だけでなく、たとえば、ユーザーを保存することはできません)。しかし、これらのスキームは機能しません。この場合、何@user_session.saveも返されません。

更新

Shripad Kのリンク ソース ( http://github.com/shripadk/authlogic_openid_selector_example/blob/master/app/models/user_session.rb ) を調べると、次のことがわかりました。

class UserSession < Authlogic::Session::Base
  auto_register
end

auto_registerが私が必要な全てです

4

2 に答える 2

1

車輪を再発明するのではなく、これを試すことができます: http://github.com/shripadk/authlogic_openid_selector_example

ライブ サンプル アプリ: http://testingauth.heroku.com/

于 2010-07-18T05:52:51.250 に答える
0

えーと。POSTをuser_sessionscreateアクションにリダイレクトできないため、次のようにハックしました。

class UsersController < ApplicationController
  def new
    @user = User.new
  end

  def create
    @user = User.new(params[:user])
    @user.save do |result|
      if result
        redirect_to root_url
      else
        if User.find_by_openid_identifier(@user.openid_identifier)
          redirect_to :action => 'login', "user_session[openid_identifier]" => @user.openid_identifier
        else
          render :action => "new"
        end
      end
    end
  end

  def login
    @user_session = UserSession.new(params[:user_session])
    @user_session.save do |result|
      if result
        redirect_to root_url
      else
        render :action => 'new'
      end
    end    
  end
end
于 2010-07-17T20:04:07.147 に答える