小编idr*_*ale的帖子

使用omniauth和Facebook验证用户是否为rails API?

我正在构建一个Rails API,并已成功为用户构建了一种使用Omniauth Identity进行身份验证的方法.

我们只需从客户端发送到auth/identity/callback,传入auth_key和密码.
然后,服务器返回一个门卫令牌,用户随后使用该门牌令牌来访问应用程序并识别自己.

该图说明了这一点:

客户服务器关系

我们现在想要从客户端实现Facebook登录,但在理论上和实际上都无法使其正常工作.

在一个简单的带有Omniauth身份的Rails应用程序上,你只需要调用auth/facebook,但是如果我们在客户端中放置一个链接,它会调用服务器,然后服务器会记录:

INFO -- omniauth: (facebook) Request phase initiated.

该应用程序在Facebook中正确设置了ID和密码,因此登录提示可能会返回到服务器?

虽然链接身份验证我很困惑.任何帮助感激不尽!

在此输入图像描述

authentication facebook ruby-on-rails omniauth

47
推荐指数
1
解决办法
2万
查看次数

使用凭据创建新用户,然后在API中使用Doorkeeper获取该用户的令牌

我正在构建一个受门卫保护的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.

我已经对门把源进行了挖掘,但是在这些聪明的中间件中我有点迷失了.对此有任何建议非常感谢!

ruby-on-rails oauth doorkeeper

12
推荐指数
2
解决办法
8042
查看次数

您如何期望在Rspec中使用.deliver调用邮件程序功能?

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?

ruby rspec ruby-on-rails

2
推荐指数
1
解决办法
695
查看次数