Итак, я работаю над api на основе местоположения с рельсами, где в местоположении есть много пользователей и пользователь принадлежит к определенному местоположению. Это означает, что таблица пользователя будет содержать столбец location_id, который служит в качестве внешнего ключа. Это, однако, отличается от большинства приложений, над которыми я работал, в которых у пользователя будет много «продуктов», например. Итак, у меня есть это в моем locations_controller.rb файлеЦепь фильтра остановлена как: authenticate_with_token! визуализированный или перенаправленный Rails API
class Api::V1::LocationsController < ApplicationController
before_action :authenticate_with_token!, only: [:create]
respond_to :json
def show
respond_with Location.find(params[:id])
end
def create
# @location = current_user.locations.build(location_params)
@location = Location.new(location_params)
current_user.location = @location
current_user.save
if @location.save
render json: @location, status: :created, location: [:api, :v1, @location]
else
render json: {errors: @location.errors}, status: :unprocessable_entity
end
end
private
def location_params
params.require(:location).permit(:latitude, :longitude, :address)
end
end
Но я получаю ошибку
Started POST "/api/v1/locations" for 127.0.0.1 at 2016-12-20 10:05:50 +0100
Processing by Api::V1::LocationsController#create as JSON
Parameters: {"location"=>{"latitude"=>"2.23413", "longitude"=>"2.908019", "address"=>"Sims1 streets"}}
User Load (0.3ms) SELECT "users".* FROM "users" WHERE "users"."auth_token" IS NULL LIMIT 1
Filter chain halted as :authenticate_with_token! rendered or redirected
Completed 401 Unauthorized in 5ms (Views: 0.2ms | ActiveRecord: 0.5ms)
Мой вопрос: Как я могу решить эту проблему? Я искал всюду, но все безрезультатно. Пожалуйста, помогите
Мой файл authenticable.rb является
module Authenticable
# Devise methods overrides. This finds the user by auth_token and it's sent to the server
def current_user
@current_user ||= User.find_by(auth_token: request.headers["Authorization"])
end
def authenticate_with_token!
render json: { errors: "Not authenticated" }, status: :unauthorized unless user_signed_in?
end
def user_signed_in?
current_user.present?
end
end
Если 'request.headers [«Authorization»]' пуст или отсутствует, он будет регистрировать вас в качестве первого пользователя он обнаружил, что не имеет набора 'auth_token'. Убедитесь, что 'request.headers [" Authorization "]' не ноль! – mattes