Использование устройства «запоминающийся» без файлов cookie - PullRequest
3 голосов
/ 01 ноября 2010

У меня есть рабочий сайт Rails, который использует devise для управления пользователями. Для управления сессиями я использую стратегию devise revise *1004*, разработанную devise, которая хранит и получает зашифрованные данные аутентификации из cookie пользователя.

Я реализую виджет загрузки нескольких фотографий, который использует flash. Flash не поддерживает отправку файлов cookie вместе с запросами. Это проблема с несколькими мультизагрузочными библиотеками flash + javascript, поэтому, вероятно, исправить этот недостаток невозможно.

Итак, мой вопрос: могу ли я успешно пройти аутентификацию для разработки / запоминания без использования файлов cookie ? И если да, то как?

Подробнее

Разработка / запоминание зависит от значения remember_token в файле cookie. Если бы я мог обмануть Rails, думая, что значение было предоставлено в виде файла cookie (например, request.cookies['remember_token'] = '...'), моя проблема была бы решена. Разработчик / запоминающий найдет правильное значение, распакует его и успешно выполнит аутентификацию. Однако, хэш request.cookies, по-видимому, доступен только для чтения. Запись в хэш молча игнорируется. Пример (отладка консоли из входящего запроса POST):

>> request.cookies['remember_token'] = 'a string'
=> "a string"
>> request.cookies['remember_token']
=> nil
>> request.cookies
=> {}

Я использую (или пытаюсь использовать) виджет FancyUpload v3 .

1 Ответ

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

Как насчет немного переопределить Devise?

На основе Devise 1.2.rc должно работать примерно так:

module Devise
  module Strategies
    class Rememberable
      def remember_cookie
        # your code to get the hashed value from the request
      end
    end
  end
end

В качестве альтернативы вы можете добавить новую (подклассовую) стратегию:

module Devise
  module Strategies
    class RememberableParameter < Rememberable
      def remember_cookie
        # your code to get the hashed value from the request
      end
    end
  end
end
Warden::Strategies.add(:rememberable_parameter, Devise::Strategies::Rememberable)

Или посмотрите на токен Authenticatable:

Token Authenticatable: подписывает пользователя на основе токена аутентификации (также известного как "токен единого доступа"). Токен может быть передан как через строку запроса, так и через Базовая аутентификация HTTP

Здесь больше об этом: https://github.com/plataformatec/devise/blob/master/lib/devise/models/token_authenticatable.rb

Удачи!

...