2011-03-22 2 views
1
내가 omniauth를 사용하여 자신의 페이스 북 된 계정은을 가진 사용자를 로그인 할 고안하고있어

을 검증하기 위해, 모든 그러나 작동 내가 해시에서 이메일을 끌어하려고 할 때이 오류가 얻을 :당겨 이메일 사용자 모델

NoMethodError in AuthenticationsController#create 
undefined method `id' for "/":String 

다음은 오류의 전체 로그는 다음과 같습니다 http://pastie.org/1698569

오류가 사라집니다 그리고 그것은 나를 내가 새로 고침 후 잘에 로그인 할 수 있습니다!

편집 : 나는 경우,

def apply_facebook(omniauth)      
    if (extra = omniauth['extra']['user_hash'] rescue false) 
    self.email = (extra['email'] rescue '') 
end 
end 

그러나 사용자 : 그것은이 방법을 실행 한 후 몇 가지 이유를 들어 내 인증 컨트롤러

 sign_in_and_redirect_to(:user, root_path) 

에서의 라인 (22) 내가를 sign_in 수 없다고 밝혀 그 방법을 실행하지 않으면, 그냥 sign_in_and_redirect_to 잘 할 수 있습니다.

내 컨트롤러/모델은 http://pastie.org/1698453

입니다.

정말 당신이 sign_in_and_redirect의 두 번째 매개 변수로 root_path을 사용할 수 없습니다

답변

1

어떤 도움을 주셔서 감사합니다.

sign_in_and_redirect :user, @user      # sign_in(scope, resource) 
sign_in_and_redirect @user        # sign_in(resource) 
sign_in_and_redirect @user, :event => :authentication # sign_in(resource, options) 
sign_in_and_redirect @user, :bypass => true   # sign_in(resource, options) 

두 번째 매개 변수는 자원 또는 옵션 (이 문자열의) 중 하나가 아니기 때문에 오류가 있어요 : 다음은 몇 가지 가능한 당신이 그것을 사용할 수있는 방법이 있습니다. 당신은 그것을 변경해야

sign_in_and_redirect(:user, user) # based on your pastie 

당신이 로그인, 당신은 당신의와 ApplicationController이 같은 뭔가를 할 수 후 다른 URL로 이동을 강제로 반환 경로를 사용자 정의하려면 :

def after_sign_in_path_for(resource) 
    "/go/to/this/path" 
end 
+0

facebook으로 문제를 해결해 주셔서 감사합니다. 그러나 지금은 트위터를 통해 인증을받을 때 오류가 발생합니다. 내가 다른 코드의 변경 havent 및이 오류 : ActionDispatch :: Cookies :: CookieOverflow AuthenticationsController #에서 만들기, 그것은 레일에서 4kb lim과 함께 할 것으로 보인다하지만 어떻게이 주위를 얻을 것이라고 ?? 고맙습니다. –

+0

나는 session_store에서 active_record_store로 바뀌었고 이제는 모든 것이 작동합니다 :) –

관련 문제