Как получить токен JWT в заголовке при использовании Rails и React - PullRequest
0 голосов
/ 12 февраля 2020

Мой контроллер Sessions настроен, как показано ниже. Я ищу способ получить auth_token из command.result в методе authenticate и сделать его доступным в моих заголовках, когда пользователь входит в систему, чтобы я мог получить к нему доступ, реагируя на аутентификацию пользователей при каждом запросе.

Когда я делаю запрос к действию аутентификации, я получаю правильный ответ с auth_token, но не могу понять, как отправить этот ответ в заголовок и использовать его там.

class Api::V1::SessionsController < ApplicationController
  skip_before_action :authenticate_request
  include CurrentUserConcern

  def authenticate
    command = AuthenticateUser.call(params[:email], params[:password])

    if command.success?
      render json: { auth_token: command.result, message: 'Login successful' }
    else
      render json: { error: command.errors }, status: :unauthorized
    end
  end

  def create
    user = User.find_by(email: params[:email])
      .try(:authenticate, params[:password])

    if user
      session[:user_id] = user.id
      render json: {
        status: :created,
        logged_in: true,
        user: user,
      }

    else
      render json: {
        status: 400,

      }, status: 400
    end
  end

  def logged_in
    if @current_user
      render json: {
        logged_in: true,
        user: @current_user
      }
    else
      render json: {
        logged_in: false
      }
    end
  end

  def logout
    reset_session
    render json: { status: 200, logged_out: true }
  end


end

1 Ответ

0 голосов
/ 12 февраля 2020

Понял.

Я установил before_action в моем контроллере для установки переменной @token. Таким образом, я могу использовать @token в любом действии внутри контроллера.

 class Api::V1::SessionsController < ApplicationController
      skip_before_action :authenticate_request
      before_action :set_token
 end

Затем я создал закрытый метод для установки токена.

  def set_token
    command = AuthenticateUser.call(params[:email], params[:password])
    if command.success?
      @token = command.result
    else
      nil  
    end
  end

И вызвал переменную @token внутри мое действие создания передает его set_headers.

response.set_header('token', @token)
...