我正在构建一个Rails API,并已成功为用户构建了一种使用Omniauth Identity进行身份验证的方法.
我们只需从客户端发送到auth/identity/callback,传入auth_key和密码.
然后,服务器返回一个门卫令牌,用户随后使用该门牌令牌来访问应用程序并识别自己.
该图说明了这一点:

我们现在想要从客户端实现Facebook登录,但在理论上和实际上都无法使其正常工作.
在一个简单的带有Omniauth身份的Rails应用程序上,你只需要调用auth/facebook,但是如果我们在客户端中放置一个链接,它会调用服务器,然后服务器会记录:
INFO -- omniauth: (facebook) Request phase initiated.
该应用程序在Facebook中正确设置了ID和密码,因此登录提示可能会返回到服务器?
虽然链接身份验证我很困惑.任何帮助感激不尽!

我正在构建一个受门卫保护的API.
如果我在后端手动创建用户(带密码),然后将以下内容发布到oauth/token,则Doorkeeper会成功为用户生成访问令牌并将其返回:
data = {
username: $("#email_sign_in").val(),
password: $("#password").val(),
grant_type: 'password',
client_id: '880c16e50aee5893446541a8a0b3788....',
client_secret: 'a5108e1a1aeb87d0bb49d33d8c50d....',
provider: 'identity'
}
Run Code Online (Sandbox Code Playgroud)
但是,我正试图了解如何进行注册流程.
我很高兴能够users/create工作,只要它创建用户和密码,但我不知道如何在下一步生成Doorkeeper :: AccessToken,并将其返回给客户端.理想情况下,在用户#create操作中创建用户后,我会oauth/token使用用户的名称和密码重定向到POST ,但我知道您无法重定向到POST.
我已经对门把源进行了挖掘,但是在这些聪明的中间件中我有点迷失了.对此有任何建议非常感谢!
我EmailTrainersAboutMissingReports.call对要求它调用的服务进行了测试TrainerMonitorMailer.missing_run_reports:
describe EmailTrainersAboutMissingReports do
describe ('::call') do
context 'missing two group runs' do
let!(:group_run) { FactoryGirl.create :group_run, started_at: 1.day.ago }
let!(:group_run_2) { FactoryGirl.create :group_run, started_at: 1.day.ago }
it 'is successful' do
expect(TrainerMonitorMailer).to receive(:missing_run_reports).with(area,
[group_run, group_run_2])
EmailTrainersAboutMissingReports.call
end
end
end
end
Run Code Online (Sandbox Code Playgroud)
随附服务的代码如下所示:
class EmailTrainersAboutMissingReports
def self.call
response = RunReportMonitor.check_all_got_published_on_time(area)
unless response.success?
TrainerMonitorMailer.missing_run_reports(area, response.group_runs_missing_reports).deliver
end
end
end
Run Code Online (Sandbox Code Playgroud)
我遇到麻烦的地方是我将deliver方法链接到邮件程序.所以,当我运行测试时,我会收到:
undefined method `deliver' for nil:NilClass
Run Code Online (Sandbox Code Playgroud)
我如何定义期望,以便它期望带有上述参数的missing_run_reports,但是也期望这个链接调用.deliver?