ruby-on-rails - Omniauth 的自定义策略

标签 ruby-on-rails oauth-2.0 omniauth

我需要为 Rails 中的应用程序实现自定义策略, 软件版本: rails 5.0.7.2 ruby 2.3.2p217(2016-11-15 修订版 56796)[x86_64-linux] bundler 版本1.16.6

这些是我添加的文件:

# config/initializers/omniauth.rb
module OmniAuth
  module Strategies
    # tell OmniAuth to load our strategy
    autoload :Platform, 'lib/strategies/platform.rb'
  end
end

Rails.application.config.middleware.use OmniAuth::Builder do
  # pass the 2 parameters to the constructor
  provider :platform, "Client Id", "Client Secret",
      client_options: {
        site: "https://my.auth.provider",
        user_info_url: "/connect/userinfo"
      }

end

现在,在我的 lib/strategies/目录中创建了我的策略文件:

# lib/strategies/platform.rb
require 'omniauth-oauth2'

module OmniAuth
  module Strategies
    class Platform < OmniAuth::Strategies::OAuth2
      option :name, :platform

      option :client_options, {
        :site => "https://my.auth.provider",
        :authorize_url => "/connect/authorize",
        :user_info_url => "/connect/userinfo"
      }

      uid { raw_info["id"] }

      info do
        {
          :email => raw_info["email"]
          # and anything else you want to return to your API consumers
        }
      end

      def raw_info
        @raw_info ||= access_token.get('/connect/userinfo/me.json').parsed
      end

      def callback_url
        full_host + script_name + callback_path
      end
    end
  end
end

我在 config/routes.rb 中注册了回调 URL:

#OAuth2 Generic
get "/auth/:provider/callback" => "sessions#create"

现在,我正在尝试配置的这个应用程序已经为 Google、Twitter 和 Facebook 设计并启用了omniauth,但由于某种原因,我的 URL 从未注册。我缺少什么?我应该怎么办? 我想要拥有

user_platform_omniauth_authorize_path and
user_platform_omniauth_callback_path

Registered routes for my app

最佳答案

将以下内容添加到您的模型中:

class User < ApplicationRecord
  devise :omniauthable, omniauth_providers: %i[platform]
end

关于ruby-on-rails - Omniauth 的自定义策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56378857/

相关文章:

ruby-on-rails - 如何在 ruby​​/rails 中将多个参数传递给 Proc?

ruby-on-rails - 使用 i18n html 键进行 rspec 牛排验收测试

android - 需要使用YouTube API授权Android应用的指南

oauth-2.0 - Microsoft id_token 声明中缺少 OID 声明

ruby-on-rails - 如何使用 Rails、Omniauth 和 Rspec 测试 Facebook 登录操作

javascript - 多重选择在继续后忘记选择的值

ruby-on-rails - 尝试通过 ubuntu WSL 终端在 rails 上安装 ruby​​ 时出现多个错误

php - OAuth 2 适用于我拥有的移动客户端

ruby-on-rails - Ruby on Rails - 找不到 :google_oauth2 的匹配策略

ruby-on-rails - 我如何设计/omniauth 重定向到我登录的页面?