NoMethodError (неопределенный метод `tasks 'для nil: NilClass) - PullRequest
0 голосов
/ 13 февраля 2020

С внешнего интерфейса отправляется запрос на создание Taska и я получаю вот такую ​​ошибку:

enter image description here

Есть еще одна ошибка на сервере:

enter image description here

В самой консоли я получаю:

enter image description here

enter image description here

def create
  @task = current_user.tasks.new(task_params)            // It's 19 line tasks_controller

  if @task.save
    render json: @task, status: :created, location: @task
  else
    render json: @task.errors, status: :unprocessable_entity
  end
end

и

private

def task_params
  params.require(:task).permit(:title, :body)
end

current_user - application_controller.rb

def current_user
  current_user ||= User.find_by(token: request.headers['Authorization'])
end

Пользователи таблицы схем.

enter image description here

Я новичок во всем этом, что для вас очевидно, мне неизвестно, поэтому я здесь.

1 Ответ

2 голосов
/ 13 февраля 2020

Это ошибка аутентификации classi c "сделай сам", ноль. При настройке системы аутентификации вы должны убедиться, что любое действие, требующее, чтобы пользователь вошел в систему, произвело сбой на раннем этапе и перенаправило пользователя на вход, или если его API отправит заголовок, который указывает, что пользователь не авторизован.

class AuthenticationError < StandardError; end

class ApplicationController
  # locking everything down makes your app secure by default
  # use skip_before_action :authenticate_user! to allow unauthorized users 
  before_action :authenticate_user!

  rescue_from AuthenticationError, with: :handle_unauthorized_access

  private

  def authenticate_user!
    raise AuthenticationError unless current_user
  end

  def handle_unauthorized_access
    respond_to do |f|
      f.html { redirect_to '/path/to/login', notice: 'Please sign in' }
      f.json { head :unauthorized  }
    end
  end

  # ...
end

Еще лучше не изобретать велосипед. Аутентификация трудна, и мы все облажаемся. Вот почему хорошо использовать такие библиотеки, как Devise или Knock, у которых есть масса глаз для просмотра кода.

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