通过“设计”进行的Google身份验证失败

西奥·卡普代(Theo Capdet)

我想在我的应用中创建GOOGLE身份验证。因此,正确设置“ omniauth”和“ devise”(我认为)。在我的布局文件夹的“ _header.html.erb”视图中:

<% if user_signed_in? %>Signed in as <%= current_user.name %>. Not you?
<%= link_to "Sign out", destroy_user_session_path,:method => :delete %>
<% else %>
<%= link_to "Sign in with Google", user_omniauth_authorize_path(:google_oauth2) %>
<% end %>

当我尝试连接时,我单击此代码提供的链接以打开新页面,然后选择我的Google帐户,然后接受权利并将此重定向到同一页面。(链接在哪里)。我的数据库正确填写了帐户信息。

但是就像代码说的那样,我希望在连接后标题显示连接帐户的名称,但事实并非如此。它再次打印“使用google登录”。

此外,我想在连接后在另一个页面上重定向。我怎么做。也许我必须定义user_signed_in?方法,如果是这样,在哪里以及如何使用?

current_user是在application_controller中定义的,如下所示:

def current_user
  @current_user ||= User.find(session[:user_id]) if session[:user_id]
end

在我的用户模型中,我只有:

def self.find_for_google_oauth2(access_token, signed_in_resource=nil)
    data = access_token.info
    user = User.where(:provider => access_token.provider, :uid =>     access_token.uid ).first

    unless user
      #registered_user = User.where(:email => access_token.info.email).first

      #if registered_user
      #  return registered_user
      #else
        user = User.create(
          name: data["name"],
          provider:access_token.provider,
          email: data["email"],
          uid: access_token.uid ,
          password: Devise.friendly_token[0,20],
        )
      #end

   end
   p user
   user
end

希望你能帮助我。

提前致谢。

PS:如果您需要一些代码,只需说出注释,然后我将用代码的一部分来编辑问题。

阿克塞·波拉德(Akshay Borade)

创建一个OmniauthCallbacksController并添加以下代码

class OmniauthCallbacksController < ApplicationController

  skip_before_filter :authenticate_user!
  def all
    p env["omniauth.auth"]
    user = User.from_omniauth(env["omniauth.auth"])
    if user.persisted?
      flash[:notice] = "You are in..!!! Go to edit profile to see the status for the accounts"
      sign_in_and_redirect(user)
    else
      session["devise.user_attributes"] = user.attributes
      redirect_to new_user_registration_url
    end
  end

  def failure
    #handle you logic here..
    #and delegate to super.
    super
  end

  alias_method :google_oauth2, :all
end

在你的config / routes.rb中

devise_for :users, controllers: { omniauth_callbacks: "omniauth_callbacks" }

创建授权模型

rails g model Authorization

在迁移中添加以下代码

class CreateAuthorizations < ActiveRecord::Migration
  def change
    create_table :authorizations do |t|
      t.string :provider
      t.string :uid
      t.integer :user_id
      t.string :token
      t.string :secret
      t.timestamps
    end
  end
end

然后

rake db:migrate

在您的模型/authorization.rb中

belongs_to :user

在您的模型/user.rb中

has_many :authorizations

def self.from_omniauth(auth)
  authorization = Authorization.where(:provider => auth.provider, :uid => auth.uid.to_s).first_or_initialize
  authorization.token = auth.credentials.token
  if authorization.user.blank?
    user = User.where('email = ?', auth["info"]["email"]).first
    if user.blank?
     user = User.new
     user.password = Devise.friendly_token[0,10]
     user.email = auth.info.email
     user.save
    end
   authorization.user_id = user.id
   if auth.provider == "google_oauth2"
    authorization.secret = auth.credentials.refresh_token !auth.credentials.refresh_token.blank?
    authorization.secret = auth.credentials.secret 
   end
  end
  authorization.save
  authorization.user
end

希望这会帮助你。

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

通过Google进行OWIN身份验证

来自分类Dev

通过Google进行OWIN身份验证

来自分类Dev

通过REST API身份验证进行TeamCity备份失败

来自分类Dev

通过REST API身份验证进行TeamCity备份失败

来自分类Dev

使用令牌通过令牌进行身份验证,如果令牌失败则通过会话进行身份验证?

来自分类Dev

使用令牌通过令牌进行身份验证,如果令牌失败,则通过会话进行身份验证?

来自分类Dev

无法通过R对Google翻译进行身份验证

来自分类Dev

问题通过Curl对Google进行身份验证

来自分类Dev

通过Atmosphere + Dropwizard进行身份验证

来自分类Dev

通过HttpClient进行SPNEGO身份验证

来自分类Dev

通过HTTP进行ArangoDB身份验证

来自分类Dev

通过LDAP进行外部身份验证

来自分类Dev

通过Unirest JAVA进行身份验证

来自分类Dev

无法通过GUI进行身份验证

来自分类Dev

通过API进行Facebook身份验证

来自分类Dev

通过Wordpress进行Icecast身份验证

来自分类Dev

Laravel通过Ajax进行身份验证

来自分类Dev

通过Linux主机进行身份验证

来自分类Dev

在Mac上通过https进行克隆的git身份验证失败

来自分类Dev

通过 SSH 密钥进行服务器身份验证失败

来自分类Dev

如何通过Google测试身份验证?

来自分类Dev

使用服务帐户进行Google身份验证失败(node.js)

来自分类Dev

使用Google帐户通过非Google API对Chrome扩展程序进行身份验证

来自分类Dev

通过应用脚本使用Google Spread Sheet进行Google身份验证

来自分类Dev

即使身份验证失败,仍然对localPlayer进行身份验证

来自分类Dev

无法在 kubernetes 上对 mongodb 隐藏成员进行身份验证,“身份验证失败。”

来自分类Dev

.NET Google API 1.7 Beta通过刷新令牌进行身份验证

来自分类Dev

如何通过Google Apps Marketplace通用导航链接对用户进行身份验证

来自分类Dev

通过代码而不是“同意屏幕” ASP.net/C#对Google用户进行身份验证

Related 相关文章

  1. 1

    通过Google进行OWIN身份验证

  2. 2

    通过Google进行OWIN身份验证

  3. 3

    通过REST API身份验证进行TeamCity备份失败

  4. 4

    通过REST API身份验证进行TeamCity备份失败

  5. 5

    使用令牌通过令牌进行身份验证,如果令牌失败则通过会话进行身份验证?

  6. 6

    使用令牌通过令牌进行身份验证,如果令牌失败,则通过会话进行身份验证?

  7. 7

    无法通过R对Google翻译进行身份验证

  8. 8

    问题通过Curl对Google进行身份验证

  9. 9

    通过Atmosphere + Dropwizard进行身份验证

  10. 10

    通过HttpClient进行SPNEGO身份验证

  11. 11

    通过HTTP进行ArangoDB身份验证

  12. 12

    通过LDAP进行外部身份验证

  13. 13

    通过Unirest JAVA进行身份验证

  14. 14

    无法通过GUI进行身份验证

  15. 15

    通过API进行Facebook身份验证

  16. 16

    通过Wordpress进行Icecast身份验证

  17. 17

    Laravel通过Ajax进行身份验证

  18. 18

    通过Linux主机进行身份验证

  19. 19

    在Mac上通过https进行克隆的git身份验证失败

  20. 20

    通过 SSH 密钥进行服务器身份验证失败

  21. 21

    如何通过Google测试身份验证?

  22. 22

    使用服务帐户进行Google身份验证失败(node.js)

  23. 23

    使用Google帐户通过非Google API对Chrome扩展程序进行身份验证

  24. 24

    通过应用脚本使用Google Spread Sheet进行Google身份验证

  25. 25

    即使身份验证失败,仍然对localPlayer进行身份验证

  26. 26

    无法在 kubernetes 上对 mongodb 隐藏成员进行身份验证,“身份验证失败。”

  27. 27

    .NET Google API 1.7 Beta通过刷新令牌进行身份验证

  28. 28

    如何通过Google Apps Marketplace通用导航链接对用户进行身份验证

  29. 29

    通过代码而不是“同意屏幕” ASP.net/C#对Google用户进行身份验证

热门标签

归档