发布
社区首页 >问答首页 >Rails:使用RestClient的外部API集成(400个坏请求)

Rails:使用RestClient的外部API集成(400个坏请求)
EN

Stack Overflow用户
提问于 2019-08-22 18:48:54
回答 1查看 298关注 0票数 0

我正在建设一个数字图书馆,我已经完成了许多所需的功能。目前,我在将数字图书馆与学习管理系统(LMS)集成方面存在问题。

我已经有一个管理认证系统的数字图书馆使用的设计宝石。我的目标是允许想要访问数字图书馆的用户使用他们的学习管理系统(LMS)凭据(用户名和密码)登录到数字图书馆。

我已经获得了学习管理系统(LMS)的Login端点和其他所需参数,并创建了用户模型会话控制器会话视图模板

我目前正在为API调用使用RestClient Gem,但是有一个错误400坏请求。我试着调试这个问题,它可以指向会话控制器中的这一行

代码语言:javascript
代码运行次数:0
复制
 response = RestClient::Request.execute(

下面是我的源代码

会话控制器

代码语言:javascript
代码运行次数:0
复制
require 'rest-client'

class SessionsController < ApplicationController
  def new
  end

  def create
    response = RestClient::Request.execute(
      method: :post,
      url: 'https://newapi.example.com/token',
      payload: { 'username': 'params[:username]',
                 'password': 'params[:password]',
                 'grant_type':'password' },
      headers: { apiCode: '93de0db8-333b-4f478-aa92-2b43cdb7aa9f' }
    )

    case response.code
    when 400
      flash.now[:alert] = 'Email or password is invalid'
      render 'new'
    when 200
      session[:user_id] = user.id
      redirect_to root_url, notice: 'Logged in!'
    else
      raise "Invalid response #{response.to_str} received."
    end
  end

  def destroy
    session[:user_id] = nil
    redirect_to root_url, notice: 'Logged out!'
  end
end

会话新视图

代码语言:javascript
代码运行次数:0
复制
<p id=”alert”><%= alert %></p>
<h1>Login</h1>
<%= form_tag sessions_path do %>
  <div class="field">
    <%= label_tag :username %>
    <%= text_field_tag :username %>
  </div>
  <div class="field">
    <%= label_tag :password %>
    <%= password_field_tag :password %>
  </div>
  <div class="actions">
    <%= submit_tag 'Login' %>
  </div>
<% end %>

用户模型

代码语言:javascript
代码运行次数:0
复制
class User < ApplicationRecord
  has_secure_password

  validates :username, presence: true, uniqueness: true
end

对代码示例的任何形式的帮助都将不胜感激。如果需要的话,我也愿意提供更多关于这种集成的信息。提前谢谢你。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-08-22 19:06:34

你应该删除你的帕拉姆斯周围的引语:

代码语言:javascript
代码运行次数:0
复制
 response = RestClient::Request.execute(
      method: :post,
      url: 'https://newapi.example.com/token',
      payload: { 'username': params[:username],
                 'password': params[:password],
                 'grant_type':'password' },
      headers: { apiCode: '93de0db8-333b-4f478-aa92-2b43cdb7aa9f' }
    )

如果您有引号,这意味着您的username值et password值是硬编码的。在这里,您想从您的params检索usernamepassword

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57615476

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档