2010-07-17 5 views
2

나는 Rayan Bates http://railscasts.com/episodes/170-openid-with-authlogic 소스를 기반으로 놀고있었습니다.Authlogic 및 OpenID 등록 및 로그인 한 번에

Google, Yandex, OpenID와 같은 OpenID 제공 업체의 아이콘을 거의 만들지 않으므로 어느 것을 사용할 지 선택해야합니다 (stackoverflow와 유사). 그래서 모든 것이 좋습니다. 이제 로그인 또는 등록을 위해 단 한 번의 클릭 만하기로 결정했습니다. 사용자가 Authlogic 아이콘을 클릭하면 새 사용자를 만들고 인증하거나 사용자가 있으면 인증합니다. 그래서 사용자 번호에 로직을 변경하는 공동 작성 : 사용자가 저장 될 수없는 경우

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을 반환하지 않습니다. 내가

답변

1

바퀴를 재발견하는 대신이 시도를 제공 할 수 있습니다

+0

이 재미 있습니다. – fl00r

+0

을 살펴 보겠습니다. UserSession 모델의'auto_register'만으로 충분합니다. – fl00r

+1

'auto_register'에 버그가 있습니다. 사실 나는 커밋으로 내 애플 리케이션을 패치했습니다. 최신 커밋을보십시오. 패치없이 auto_register를 사용하면 open-id 공급자로부터 전자 메일 주소 (또는 sreg/ax)를 반환하지 않습니다 !! –

0

흠이 필요

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

auto_register 모든입니다 : UPD

Shripad K 링크 소스 (http://github.com/shripadk/authlogic_openid_selector_example/blob/master/app/models/user_session.rb) 나는이를 잡을 것으로 찾고있다. 내가 user_sessions에 POST를 리디렉션 할 수 없으므로 조치를 작성, 그래서 나는이 같은 해킹했습니다 : http://github.com/shripadk/authlogic_openid_selector_example

라이브 예제 응용 프로그램 : http://testingauth.heroku.com/

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