1

嘿,我试图将omniauth 集成到我的应用程序中,但我没有使用设计。我正在关注 Ryan Bates 屏幕投射 OmniAuth 第 2 部分 #236,他假设每个人都在使用设计。在 authentication_controller.rb 中有一个设计特定的代码

   def create
omniauth = request.env["omniauth.auth"]
authentication = Authentication.find_by_provider_and_uid(omniauth['provider'], omniauth['uid'])
if authentication
  flash[:notice] = "Signed in successfully."
  sign_in_and_redirect(:user, authentication.user)
 elsif current_user
  current_user.authentications.create!(:provider => omniauth['provider'], :uid => omniauth['uid'])
  flash[:notice] = "Authentication successful."
  redirect_to authentications_url
 else
  user = User.new
  user.apply_omniauth(omniauth)
 if user.save
    flash[:notice] = "Signed in successfully."
    sign_in_and_redirect(:user, user)
  else
    session[:omniauth] = omniauth.except('extra')
    redirect_to new_user_registration_url
  end
end

结尾

它的sign_in_and_redirect

当我刷新我的页面时,我得到一个

 undefined method `sign_in_and_redirect'

有没有人知道解决这个问题...我对 Rails 很陌生,所以一步一步是理想的。

也谢谢大家,如果有人知道一个很好的教程,涵盖在没有 DEVISE 的情况下集成 OmniAuth 也会很棒。

4

1 回答 1

2

我建议看看这些 rails/ascii cast:

http://railscasts.com/episodes/241-simple-omniauth

http://asciicasts.com/episodes/304-omniauth-identity

sign_in_and_redirect将在会话中设置当前用户,以及您在登录时要执行的任何其他操作,然后重定向到主页,或者您在成功登录后设置为页面的任何内容。

相反,自己在这里做,也许像这样:

  def create
    authentication = Authentication.find_by_provider_and_uid(omniauth['provider'], omniauth['uid'])
    if authentication
      flash[:notice] = "Signed in successfully."
      session[:user_id] = authentication.user.id  
      redirect_to root_url, notice: "Signed in!"
    end
  end  

然后,在应用程序控制器中,类似:

def current_user
    User.find(session[:user_id]) if logged_in?
end

def logged_in?
    !!session[:user_id]
end
于 2012-09-20T19:49:18.273 回答