Rails Web-сервис с аутентификацией ??? Пользователь вошел в систему ?? - PullRequest
8 голосов
/ 11 ноября 2010

Есть идеи, как мне создать REST-сервис REST, где пользователь может только получать, помещать, публиковать, удалять только свои данные? Я использую Devise в качестве своего драгоценного камня аутентификации пользователя, но я не уверен, что это обрабатывает вещи RESTful способом.

Как бы я заверил, что пользователь «вошел в систему» ​​и может изменить свои данные? Должен ли я передавать какой-то токен в каждом запросе?

Ответы [ 2 ]

3 голосов
/ 16 декабря 2010

Взгляните на AuthLogic single_access_token.Он был разработан для аутентификации REST API.

3 голосов
/ 11 ноября 2010

Devise предоставит вам только аутентификацию.Это означает, что у вас есть определенный уровень уверенности в том, что пользователь идентифицирован и является тем, кем он / она говорит, что он / она является.Учитывая эту информацию, вы можете использовать механизмы Rails или другие гемы Rails (например, CanCan, Aegis, Declarative_authorization) для авторизации пользователей и определения разрешений.

Простым методом будет использование before_filter на вашем контроллере, чтобы определить, например, принадлежит ли BlogPost пользователю, который вошел в систему.

Вот простой пример того, что я имею в виду:

class BlogPostsController < ApplicationController
  before_filter :is_user_allowed, :only => [:edit, :delete, :show]

  # default Rails generated RESTful methods here    

  def is_user_allowed
    if BlogPost.find(params[:id]).try(:user_id) != current_user.id
      redirect_to access_denied_page_path
    end
  end
end

Метод is_user_allowed извлекает запрашиваемый BlogPost и определяет, разрешено ли current_user выполнять действие, путем сравнения идентификаторов пользователей.Если неравенство истинно, то оно перенаправляется на наш печально известный access_denied_page_path.

Для получения дополнительной информации о фильтрах см. Эту статью Edge Guides .

Для получения дополнительной информации оRails gems, которые могут предоставить вам эту функциональность (и больше ), посмотрите на Google и поищите rails authorization.Кроме того, вот некоторые Railscasts, которые должны предоставить некоторую информацию:

...