使用自定义工作流程构建 OmniAuth 策略
Building an OmniAuth strategy with a custom workflow
我想实现如下登录流程:
- 用户点击登录按钮
- 用户被重定向到我们的身份验证平台
- 用户提交登录凭据,然后被重定向回我们的
网站通过预设回调 URL
- OmniAuth 策略必须解码响应(使用我们的 SDK)并且
将结果保存在
omniauth.auth
哈希 中
使用 OmniAuth 策略是否可以轻松实现此过程?从文档中我不是很清楚,而且大多数已经构建的策略似乎都在使用 OAuth 工作流。
显然这很容易做到。
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
我想实现如下登录流程:
- 用户点击登录按钮
- 用户被重定向到我们的身份验证平台
- 用户提交登录凭据,然后被重定向回我们的 网站通过预设回调 URL
- OmniAuth 策略必须解码响应(使用我们的 SDK)并且
将结果保存在
omniauth.auth
哈希 中
使用 OmniAuth 策略是否可以轻松实现此过程?从文档中我不是很清楚,而且大多数已经构建的策略似乎都在使用 OAuth 工作流。
显然这很容易做到。
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