使用自定义工作流构建OmniAuth策略

时间:2016-10-25 15:09:24

标签: ruby authentication rubygems omniauth

我想实现以下登录工作流程:

  1. 用户点击登录按钮
  2. 用户被重定向到我们的身份验证平台
  3. 用户提交登录凭据,然后重定向回我们的 网站通过预先设定的回调网址
  4. OmniAuth策略必须解码响应(使用我们的SDK)和 将结果保存在omniauth.auth哈希
  5. 使用OmniAuth策略可以轻松实现此过程吗?从文档中我不太清楚,大多数已经构建的策略似乎都在使用OAuth工作流程。

1 个答案:

答案 0 :(得分:1)

显然这很容易做到。

OmniAuth策略

module OmniAuth
  module Strategies
    class Service
      include OmniAuth::Strategy

      def request_phase
        redirect AUTHENTICATION_URL
      end

      uid { @user_details.user_id }

      def extra
        @user_details # Return a hash with user data
      end

      def callback_phase
        # Configure Service SDK
        @user_details = Service.user_data # Make SDK call to get user details
        super
      end
    end
  end
end

该应用

1)使用身份验证URL添加登录按钮:

<%= link_to 'Login', 'auth/service' %>

2)添加回调路由

get '/auth/service/callback', to: 'sessions#create'

3)处理控制器中的回调响应

class SessionsController < ApplicationController
  def create
    @user = User.find_or_create_by(service_id: auth_hash.uid)
    # Handle @user
  end
end