使用Omniauth Google进行身份验证的路由

Carpetfizz

我正在尝试/me使用omn​​iauth-google-oauth2建立经过身份验证的路由到目前为止,我已经设置了用于登录和注销的库,并且可以正常工作。但是,我希望只有当用户登录时才能访问某些路由。我找到了该代码段,并做了一些小的更改以适合我的设置。

application_controller.rb

before_filter :authenticate
def authenticate
    redirect_to :login unless User.from_omniauth(env["omniauth.auth"])
end

user.rb

def self.from_omniauth(auth)
    where(provider: auth.provider, uid: auth.uid).first_or_initialize.tap do |user|
        user.provider = auth.provider
        user.uid = auth.uid
        user.name = auth.info.name
        user.first_name = auth.info.first_name
        user.last_name = auth.info.last_name
        user.email = auth.info.email
        user.picture = auth.info.image
        user.oauth_token = auth.credentials.token
        user.oauth_expires_at = Time.at(auth.credentials.expires_at)
        user.save!
    end

我用过,env["omniauth"]因为那是我在中使用的auth哈希SessionsController

但是,现在每次去时localhost:3000,都会出现以下错误:

undefined method `provider' for nil:NilClass

我假设发生这种情况是因为env["omniauth.auth"]无法从访问application_controller.rb如果是这种情况,那么我如何正确访问身份验证哈希?

贾格迪普·辛格(Jagdeep Singh)

试试这个:

application_controller.rb

before_filter :authenticate

def authenticate
  redirect_to :login unless user_signed_in?
end

def user_signed_in?
  !!current_user
end

def current_user
  @current_user ||= begin
    User.find(session[:current_user_id]) || fetch_user_from_omniauth
  end
end

def fetch_user_from_omniauth
  user = User.from_omniauth(env['omniauth.auth'])
  session[:current_user_id] = user.id
  user
end

这将首先尝试获取(从会话中)已登录的用户。如果未找到,它将尝试从omniauth创建用户,然后在会话中设置其ID,以便对于下一个请求,它不需要在env中使用omniauth来查找当前用户。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用cURL进行设备身份验证

来自分类Dev

使用Glass进行身份验证

来自分类Dev

使用JavaScript FullStack进行Passport Google身份验证

来自分类Dev

使用Google Cloud Endpoints进行机器对机器的身份验证

来自分类Dev

无需身份验证即可使用Google OpenID Connect进行身份验证

来自分类Dev

使用REST进行远程身份验证

来自分类Dev

使用AES进行DESFire身份验证

来自分类Dev

使用.boto Google Cloud Storage API进行身份验证

来自分类Dev

使用Python对Google Storage进行身份验证

来自分类Dev

错误12501使用Google登录进行身份验证

来自分类Dev

使用Go进行Google Cloud Bigtable身份验证

来自分类Dev

Rails 4-设计Omniauth,并允许单个用户使用多种社交媒体策略进行身份验证

来自分类Dev

使用Google Firebase存储而不进行身份验证

来自分类Dev

首先使用Facebook进行身份验证,然后使用Google进行身份验证,导致Android版Firebase出现错误

来自分类Dev

使用私有路由和上下文进行身份验证

来自分类Dev

使用服务帐户进行Google Admin SDK身份验证

来自分类Dev

在Google API(日历)上使用Flutter进行身份验证

来自分类Dev

使用Podman向Google Container Registry进行身份验证

来自分类Dev

使用Flask-Login进行身份验证URL路由

来自分类Dev

使用Firebase身份验证对Google Cloud BigQuery库进行身份验证-NodeJS

来自分类Dev

如何使用Google用户名进行身份验证。点亮Firebase身份验证

来自分类Dev

针对Google进行身份验证的间歇性OmniAuth错误

来自分类Dev

如何在Rails 4中使用Omniauth-facebook对用户进行身份验证

来自分类Dev

是否可以使用Ember Simple Auth对所有路由进行身份验证?

来自分类Dev

使用Google身份验证在SSH服务器上进行两因素身份验证

来自分类Dev

身份验证失败:omniauth

来自分类Dev

Django 使用 Google 和 VK 进行身份验证?

来自分类Dev

使用 Python 对 Google Calendar API 进行 OAuth 身份验证

来自分类Dev

使用大使身份验证服务仅需要对某些路由/网址(或服务)进行基本身份验证

Related 相关文章

  1. 1

    使用cURL进行设备身份验证

  2. 2

    使用Glass进行身份验证

  3. 3

    使用JavaScript FullStack进行Passport Google身份验证

  4. 4

    使用Google Cloud Endpoints进行机器对机器的身份验证

  5. 5

    无需身份验证即可使用Google OpenID Connect进行身份验证

  6. 6

    使用REST进行远程身份验证

  7. 7

    使用AES进行DESFire身份验证

  8. 8

    使用.boto Google Cloud Storage API进行身份验证

  9. 9

    使用Python对Google Storage进行身份验证

  10. 10

    错误12501使用Google登录进行身份验证

  11. 11

    使用Go进行Google Cloud Bigtable身份验证

  12. 12

    Rails 4-设计Omniauth,并允许单个用户使用多种社交媒体策略进行身份验证

  13. 13

    使用Google Firebase存储而不进行身份验证

  14. 14

    首先使用Facebook进行身份验证,然后使用Google进行身份验证,导致Android版Firebase出现错误

  15. 15

    使用私有路由和上下文进行身份验证

  16. 16

    使用服务帐户进行Google Admin SDK身份验证

  17. 17

    在Google API(日历)上使用Flutter进行身份验证

  18. 18

    使用Podman向Google Container Registry进行身份验证

  19. 19

    使用Flask-Login进行身份验证URL路由

  20. 20

    使用Firebase身份验证对Google Cloud BigQuery库进行身份验证-NodeJS

  21. 21

    如何使用Google用户名进行身份验证。点亮Firebase身份验证

  22. 22

    针对Google进行身份验证的间歇性OmniAuth错误

  23. 23

    如何在Rails 4中使用Omniauth-facebook对用户进行身份验证

  24. 24

    是否可以使用Ember Simple Auth对所有路由进行身份验证?

  25. 25

    使用Google身份验证在SSH服务器上进行两因素身份验证

  26. 26

    身份验证失败:omniauth

  27. 27

    Django 使用 Google 和 VK 进行身份验证?

  28. 28

    使用 Python 对 Google Calendar API 进行 OAuth 身份验证

  29. 29

    使用大使身份验证服务仅需要对某些路由/网址(或服务)进行基本身份验证

热门标签

归档