Способность Cancan не находит пользователя

Я использую Cancan, чтобы только пользователи с разрешениями могли удалять объекты в моем приложении Rails. У меня есть сопутствующее мобильное приложение, которое отправляет запросы на удаление с auth_token пользователя. Вот как выглядит запрос:

Started DELETE "/projects/888?auth_token=ArpuyxbDyjtyn67r3JgF"
Processing by ProjectsController#destroy as */*
Parameters: {"auth_token"=>"ArpuyxbDyjtyn67r3JgF", "id"=>"888", "project"=>{}}

Но я получаю, что пользователь не авторизован.

Вот что я вставил в свой контроллер:

class ProjectsController < ApplicationController
 def destroy
    @project = Project.find(params[:id])
    if params[:auth_token]
      current_user = User.where(:authentication_token => params[:auth_token]).first
    end

    authorize! :destroy, @project
    @project.destroy
    respond_to do |format|
      format.html{ redirect_to user_path(current_user.username) }
      format.json { head :no_content}
    end    
  end
end

А это мой файл Ability.rb:

class Ability
  include CanCan::Ability

  def initialize(user)

    user ||= User.new

    can :destroy, Project do |project|
        project.user == user || (user && user.admin?)
    end
end

Проверяю мою базу данных, для пользователя передается правильный auth_token.

Как заставить пользователя cancan сопоставляться с пользователем с переданным параметром auth_token, чтобы он мог удовлетворить права доступа?


person scientiffic    schedule 10.08.2015    source источник
comment
разве это не должно быть user ||= User.new?   -  person Levsero    schedule 10.08.2015
comment
@Levsero спасибо, ты прав. к сожалению, это принципиально не решило проблему, о которой я писал.   -  person scientiffic    schedule 10.08.2015


Ответы (1)


Я думаю, проблема в том, что вы устанавливаете локальную переменную current_user, а не метод контроллера, который находит и возвращает текущего пользователя. Cancan ищет метод контроллера, чтобы найти файл current_user.

person Levsero    schedule 10.08.2015
comment
Я думал, что приложение сможет автоматически определить текущего пользователя с помощью переданного токена аутентификации — это проблема, которую мне следует решать с помощью devise или cancan? - person scientiffic; 10.08.2015
comment
Просто убедитесь, что вы действительно входите в систему с помощью devise, это должно быть исправлено, если проблема в этом. - person Levsero; 10.08.2015