2014-09-05 1 views
0

google_oauth2 보석을 사용하여 Google +를 통해 로그인 할 때 다음 오류가 표시됩니다.Google+ 개발자 및 레일즈 가입 (google_oauth2)

undefined method `find_for_google_oauth2' for #<Class:0x007ff70a337148> 

다음은 가입을 위해 변경 한 세 개의 파일입니다.

def google_oauth2 
    # You need to implement the method below in your model (e.g. app/models/user.rb) 
    @user = User.find_for_google_oauth2(request.env["omniauth.auth"], current_user) 

    if @user.persisted? 
    flash[:notice] = I18n.t "devise.omniauth_callbacks.success", :kind => "Google" 
    sign_in_and_redirect @user, :event => :authentication 
    else 
    session["devise.google_data"] = request.env["omniauth.auth"] 
    redirect_to new_user_registration_url 
    end 
end 

omniauth_callbacks_controller.rb user.rb

def google_oauth2 
    user = User.from_omniauth(request.env["omniauth.auth"]) 
    if user.persisted? 
    flash.notice = "Signed in Through Google!" 
    sign_in_and_redirect user 
    else 
    session["devise.user_attributes"] = user.attributes 
    flash.notice = "You are almost Done! Please provide a password to finish setting up your account" 
    redirect_to new_user_registration_url 
    end 
end 

나는 config.omniauth 추가 한 : 내 devise.rb 파일에 google_oauth2을.

routes.rb

devise_for :users, :controllers => { :registrations => "registrations", :sessions => "sessions", :omniauth_callbacks => "users/omniauth_callbacks" } 

답변

1

당신은 omniauth_callbacks_controller에서 find_for_google_oauth2를 호출하고 있지만 잘못된 방법 이름 google_oauth2을 사용하고 있습니다. google_oauth2find_for_google_oauth2으로 대체해야합니다.

컨트롤러 코드가 포함되어 있으므로 user.rb의 코드가 올바르지 않은 것 같습니다. 컨트롤러 코드와 똑같은 것처럼 보입니까? :)

def self.find_for_google_oauth2(access_token, signed_in_resource=nil) 
    data = access_token.info 
    user = User.where(:email => data["email"]).first 

    # Uncomment the section below if you want users to be created if they don't exist 
    # unless user 
    #  user = User.create(name: data["name"], 
    #  email: data["email"], 
    #  password: Devise.friendly_token[0,20] 
    # ) 
    # end 
    user 
end 

더 읽기 여기 user.rb에 대한

올바른 코드 : https://github.com/zquestz/omniauth-google-oauth2#devise

관련 문제