我正在为我的应用程序创建一个 API。一方面是 API 服务器(和主应用程序),另一方面是客户端。服务器使用 DoorKeeper 来保护使用 OAuth 2.0 的 API(基本上将主应用程序转变为 OAuth 2.0 提供程序),并且客户端使用 OmniAuth 和我的应用程序的自定义策略。
主应用程序使用子域使用多租户;所以每个客户端都有自己的子域。还有一个oauth
子域被路由到 DoorKeeper 接口。
当用户单击“使用我的应用程序登录”链接时,他会被重定向到 oauth 子域。如果他没有登录到主应用程序,他需要被重定向到正确子域下的登录页面。所以我需要将客户端的帐户名传递给服务器,以便 DoorKeeper 知道要重定向到哪个子域。
请问我怎样才能做到这一点?
我对该主题进行了研究,并发现了如何传递给将传递给回调操作的 OmniAuth 参数。服务器可以使用这些参数吗?
编辑:我没有使用设计!
编辑 2:这是一些代码。
客户端应用会话控制器创建操作(使用我的应用登录)def set_client
self.current_client = Client.find(params[:client][:name])
redirect_to "/auth/catapult?client=#{self.current_client.account_name}"
end
如您所见,我将客户端参数附加到 OmniAuth 路由,但此参数未传递给服务器应用程序(DoorKeeper),因此我不知道在服务器应用程序上重定向到何处。
门卫配置resource_owner_authenticator do
p params
User.find_by_id(session[:user_id]) || redirect_to(log_in_path)
end
在上面的重定向中,我需要将客户的帐户名称指定为子域,但我没有此信息(客户的帐户名称),因为 params 哈希不包含我传递的客户帐户名称(客户端参数)