Ruby on rails 如何结合Omniauth和OAuth登录linkedin并检索API数据?

Ruby on rails 如何结合Omniauth和OAuth登录linkedin并检索API数据?,ruby-on-rails,ruby,oauth,linkedin,omniauth,Ruby On Rails,Ruby,Oauth,Linkedin,Omniauth,我正在尝试创建一个应用程序,该应用程序将首次验证用户身份,并使用LinkedIn API将用户详细信息保存到数据库中。 下一次用户登录linkedin时,应该直接登录,而不必再次拉出此API数据 为了实现这一点,我看到有两种不同的授权方法,Omniauth(使用Omniauth-linkedin-gem)和OAuth(使用linkedin-gem)。据我所知,Omniauth gem用于单独登录,而Linkedin gem可用于请求和保存API数据 下面的控制器可以工作,但有一个问题,它会两次进

我正在尝试创建一个应用程序,该应用程序将首次验证用户身份,并使用LinkedIn API将用户详细信息保存到数据库中。 下一次用户登录linkedin时,应该直接登录,而不必再次拉出此API数据

为了实现这一点,我看到有两种不同的授权方法,Omniauth(使用Omniauth-linkedin-gem)和OAuth(使用linkedin-gem)。据我所知,Omniauth gem用于单独登录,而Linkedin gem可用于请求和保存API数据

下面的控制器可以工作,但有一个问题,它会两次进入身份验证页面,一次用于Omniauth(登录)验证,第二次用于Oauth(API pull-Linkedin gem)验证

有没有办法将这两种授权结合起来,这样用户只需登录一次linkedin,如果他/她是第一次使用,它也会直接使用OAuth进行授权(以某种方式将访问令牌从Omniauth回调-创建操作传递到OAuth回调)

景色

<%= link_to "Sign in with LinkedIn", "/auth/linkedin" %>
routes.rb

  match '/oauth_account', to: "sessions#oauth_account", via: :get
  match '/linkedin_oauth_url', to: 'sessions#generate_linkedin_oauth_url', via: :get
模型(数据库模式)

LinkedinOauthSettings

create_table "linkedin_oauth_settings", force: true do |t|
    t.string   "atoken"
    t.string   "asecret"
    t.integer  "user_id"
    t.datetime "created_at"
    t.datetime "updated_at"
  end
使用者


我想出来了。实现这一点的方法是从omniauth响应中检索访问密钥和访问令牌,并将其传递给Linkedin gem。i、 e.保存基于omniauth响应的用户凭据,并由linkedin gem用于检索api数据。 有关如何从omniauth响应中检索访问令牌和密码,请参阅以下问题的答案:

create_table "linkedin_oauth_settings", force: true do |t|
    t.string   "atoken"
    t.string   "asecret"
    t.integer  "user_id"
    t.datetime "created_at"
    t.datetime "updated_at"
  end
  create_table "users", force: true do |t|
    t.string   "provider"
    t.string   "uid"
    t.string   "name"
    t.datetime "created_at"
    t.datetime "updated_at"
  end