首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Axios - Rails API在ReactJS中注册的ReactJS

使用Axios - Rails API在ReactJS中注册的ReactJS
EN

Stack Overflow用户
提问于 2019-12-28 23:32:10
回答 2查看 262关注 0票数 1

我正在创建一个与ReactJS通信的简单Rails API。我已经使用Postman测试了API端点,它们可以工作。

但是,当我提交ReactJS表单来注册一个新用户时,我遇到了一些问题。我知道错误:

发布http://www.localhost:3000/api/v1/registration/reg 401 (未经授权)

我认为问题是在我的post请求期间没有提交或创建身份验证令牌。

ReactJS post request

这是处理表单提交按钮的ReactJS。

代码语言:javascript
复制
function handleFormSubmit(e) {
    e.preventDefault()
    axios.post("http://www.localhost:3000/api/v1/registration/reg")
        .then(res => {console.log(res)})
        .catch(err=>{console.log(err)})

}

如果我尝试使用PostmanRails Console,我可以创建一个新用户。例如,在“邮递员”中,我刚刚做了: 1)发布localhost:3000/api/v1/registration/reg 2)创建一个随机用户: 3)

代码语言:javascript
复制
{
    "email": "waffle@gmail.com",
    "password": "12345678"
}

4)我回来了:

代码语言:javascript
复制
{
    "id": 4,
    "email": "waffle@gmail.com",
    "created_at": "2019-12-28T22:59:59.454Z",
    "updated_at": "2019-12-28T22:59:59.454Z",
    "authentication_token": "SzqjkJd5ocbVh1MziZZA"
}

这在ReactJS中不会发生,我将返回:

POST http://www.localhost:3000/api/v1/registration/reg 401 (未经授权)

EN

回答 2

Stack Overflow用户

发布于 2019-12-29 05:39:19

您需要附加数据和授权令牌。

代码语言:javascript
复制
var user={
       "email": "waffle@gmail.com",
      "password": "12345678"
         }
var config = {
    headers: {'Authorization': "bearer " + token}
};

axios.post('http://www.localhost:3000/api/v1/registration/reg/user', 
  user,
  config
    )
    .then(function (response) {
     console.log(response);
    })
    .catch(function (error) {
      console.log(error);
    });

如果您正在使用Http基本身份验证,只需添加

代码语言:javascript
复制
auth: {
    username: '....',
    password: '...'
} 

配置的输入。

票数 1
EN

Stack Overflow用户

发布于 2019-12-31 02:23:29

因为用户还不存在,所以没有令牌对吗?因此,您希望在用户的创建函数之前使用跳过授权。因此,当您注册一个新用户时,您不需要发送令牌就可以访问该路由。

代码语言:javascript
复制
class UsersController <ApplicationController
skip_before_action :authenticate_user_from_token!, :only => [ :create]
  def create
    @user = User.create(user_params)
    render json: @user
  end

现在创建了用户,您可以进入登录路由,如果登录成功,您将收到令牌,下面是我的登录路由的会话控制器

代码语言:javascript
复制
class Api::V1::SessionsController < ApplicationController
  skip_before_action :authenticate_user_from_token!

  # POST /login
  def create
    @user = User.find_for_database_authentication( email: params[:user][:email])
    return invalid_login_attempt unless @user

    if @user.valid_password?(params[:user][:password])
      sign_in :user, @user
      render json: @user, serializer: SessionSerializer, root: nil
    else
      invalid_login_attempt
    end
  end

  private

  def invalid_login_attempt
    warden.custom_failure!
    render json: {error: t('sessions_controller.invalid_login_attempt')}, status: :unprocessable_entity
  end

end

您在前端的工作是维护从登录路由接收到的令牌。并通过headers授权参数将其应用于其余的获取请求。

headers: {'Authorization': "bearer " + token}

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

https://stackoverflow.com/questions/59515769

复制
相关文章

相似问题

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