用户应使用instagram登录,应创建记录

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (54)

我只想用户devise+ oauth让用户使用他们的Instagram帐户登录我的应用程序。我尝试了几个教程,devcamp和railscast视频,但只是不能让它工作。是否有一个有效的分步指南,如何用设计实现Instagram的omniauth?

每次我想阅读文档我都会感到困惑,因为Instagram只在一个块中粘贴了很多代码,没有解释,这段代码属于。他们也从不使用普通的嵌入式红宝石,而是使用haml和东西。

现在我得到了这个:

omniauth_callbacks_controller:

class OmniauthCallbacksController < Devise::OmniauthCallbacksController
  def instagram
  end
end

routes.rb

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

initializers/devise.rb

config.omniauth :instagram, ENV["INSTAGRAM_CLIENT_ID"], ENV["INSTAGRAM_CLIENT_SECRET"] 
# i had plain text instead of the env tags, but it made no difference

在我的user.rb中,我放置了一些我不太懂的会话内容的代码,但它也没有用。

提问于
用户回答回答于

代码示例

class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController
  def instagram
    session["devise.instagram_data"] = request.env["omniauth.auth"]

    if user = User.from_omniauth(request.env["omniauth.auth"])
      sign_in_and_redirect user
    else
      redirect_to new_user_registration_path
    end
  end

  def failure
    redirect_to root_path
  end
end

class User < ActiveRecord::Base
  # Include default devise modules. Others available are:
  # :confirmable, :lockable, :timeoutable and :omniauthable
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable,
         :omniauthable, omniauth_providers: [:instagram]

  def self.from_omniauth(auth)
    where(provider: auth.provider, uid: auth.uid).take
  end

  def self.new_with_session(params, session)
    super.tap do |user|
      if data = session["devise.instagram_data"]
        user.uid = data["uid"]
        user.provider = data["provider"]
        user.password = Devise.friendly_token
      end
    end
  end
end

完整示例在这里https://github.com/germanescobar/rails-devise-instagram/blob/master/app/models/user.rb

扫码关注云+社区

领取腾讯云代金券