Как изменить параметр запроса для конкретного контроллера - PullRequest
0 голосов
/ 18 марта 2019

Я пишу приложение с аутентификацией JWT, ввод осуществляется через request.query_parameters, то есть через ссылку, подобную example.com?Authorization=token, ввод работает, но когда я вызываю какое-либо действие, он перенаправляет меня в индекс без сохранения токен и выбивает 401. Мой контроллер приложений :

  protected

  def authenticate_request!
    if !payload || !JsonWebToken.valid_payload(payload.first)
      return invalid_authentication
    end

    load_current_user!
    invalid_authentication unless @current_user
  end

  def invalid_authentication
    render json: {error: 'Invalid Request'}, status: :unauthorized
  end

  private
  def payload
    auth_header = request.query_parameters['Authorization']
    token = auth_header.split(' ').last
    JsonWebToken.decode(token)
  rescue
    nil
  end

  def load_current_user!
    @current_user = User.find_by(id: payload[0]['user_id'])
  end

main_controller

class MainController < ApplicationController
  before_action :authenticate_request!

  # GET /
  def index
  end

Вот журнал для примера того, что я делаю:

Started GET "/?Authorization=eyJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjo1LCJleHAiOjE1NTMyMzQxMzgsImlzcyI6Imlzc3Vlcl9uYW1lIiwiYXVkIjoiY2xpZW50In0.q9-S1lB_ueu53XREdeXAoO_VKeEE6nBV1-d1zkO5o3M" for ::1 at 2019-03-16 21:50:09 +0600 Processing by MainController#index as HTML   Parameters: {"Authorization"=>"eyJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjo1LCJleHAiOjE1NTMyMzQxMzgsImlzcyI6Imlzc3Vlcl9uYW1lIiwiYXVkIjoiY2xpZW50In0.q9-S1lB_ueu53XREdeXAoO_VKeEE6nBV1-d1zkO5o3M"} User Load (0.4ms)  SELECT  "users".* FROM "users" WHERE "users"."id" IS NULL LIMIT ?  [["LIMIT", 1]]   CACHE (0.0ms)  SELECT  "users".* FROM "users" WHERE "users"."id" IS NULL LIMIT ?  [["LIMIT", 1]]   User Load (0.1ms)  SELECT  "users".* FROM "users" WHERE "users"."id" = ? LIMIT ?  [["id", 5], ["LIMIT", 1]]   Rendering main/index.html.erb within layouts/application   Rendered main/index.html.erb within layouts/application (0.3ms)   Rendered shared/_header.html.erb (1.3ms) Rendered shared/modals/_create_room_modal.html.erb (4.7ms) Completed 200 OK in 110ms (Views: 104.3ms | ActiveRecord: 0.6ms)


Started GET "/u/gl-fcsveclewrto/recordings" for ::1 at 2019-03-16 21:50:13 +0600 Processing by UsersController#recordings as HTML   Parameters: {"user_uid"=>"gl-fcsveclewrto"}   User Load (0.5ms)  SELECT  "users".* FROM "users" WHERE "users"."id" IS NULL LIMIT ?  [["LIMIT", 1]]   CACHE (0.0ms)  SELECT  "users".* FROM "users" WHERE "users"."id" IS NULL LIMIT ?  [["LIMIT", 1]] Redirected to http://localhost:3000/ Completed 302 Found in 4ms (ActiveRecord:
0.5ms)


Started GET "/" for ::1 at 2019-03-16 21:50:13 +0600 Processing by MainController#index as HTML   User Load (0.4ms)  SELECT  "users".* FROM "users" WHERE "users"."id" IS NULL LIMIT ?  [["LIMIT", 1]]   CACHE (0.0ms)  SELECT  "users".* FROM "users" WHERE "users"."id" IS NULL LIMIT ?  [["LIMIT", 1]] Filter chain halted as :authenticate_request! rendered or redirected Completed 401 Unauthorized in 4ms (Views: 0.4ms | ActiveRecord: 0.5ms)

Как я понимаю, он не может сохранить состояние и передать его дальше? Или я должен как-то обработать токен спереди и сохранить, скажите, пожалуйста, что я делаю не так?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...