0

在遵循 railscast (http://railscasts.com/episodes/235-omniauth-part-1) 之后,我在我的 rails3 应用程序中使用了设计和omniauth。

我可以登录,并且在我的数据库中看到 sign_in_count 列正在增加。

但是,whenuser_signed_in?总是返回 false,并current_user?返回 a no method error

我看到其他答案说问题是由 rails.js 引起的,但我没有使用 rails.js。

我的控制器是

    定义创建
        omn​​iauth = request.env["omniauth.auth"]

        身份验证 = Authentication.find_by_provider_and_uid(omniauth['provider'],omniauth['uid'])
        如果认证
            sign_in_and_redirect(:user, authentication.user)

        elsif 当前用户
            current_user.authentications.create!(:provider => omniauth['provider'], :uid => omniauth['uid'])
            重定向到 root_url
        别的
            用户 = User.new
            user.apply_omniauth(omniauth)
            如果 user.save(:validate => false)
                登录(:用户,用户)

                重定向到 root_url
            别的
                flash[:notice] = "创建帐户时出错"
                重定向到 root_url
            结尾
        结尾


    结尾
4

1 回答 1

1

我要在这里冒个险,说一个两年前的 Railscast 可能有点过时了。来自问题和评论的几件事。首先,你必须包含 Devise 的:omniauthable模块,否则,嗯,它不会工作。是的,在那之后你不会得到任何路线匹配/auth/facebook,因为你必须告诉它那在哪里。

首先,我将向您指出Devise Wiki上有关设置的文章。其次,我会插上一点,给你最近一篇关于将Google OAuth 与 Devise 结合使用的博文。最后,我将为您提供通用Devise Wiki的链接以及关于如何使用 Devise 完成各种令人敬畏的事情的近 50 篇文章。这些由社区更新,并且通常经常更新,因此它们应该包含最新的做事方式。

于 2012-09-01T14:37:11.797 回答