2016-03-03 4 views
2

У меня есть рельсы API только приложения [config.api_only = true], в котором я включаю печенье через эти следующие строки:хранения сеанса в приложении рельсы апи

в application.rb:

config.middleware.insert_after ActionDispatch::ParamsParser, ActionDispatch::Cookies 
config.middleware.insert_after ActionDispatch::ParamsParser, ActionDispatch::Session::CookieStore 

в application_controller.rb

include ActionController::Helpers 
include ActionController::Cookies 

Я также добавил secret_token.rb следующим образом:

Rails.application.config.secret_token = 'token' 

в мой контроллер, я пытаюсь сохранить сессию как это:

def index 
    #other codes 
    session[:userid] = useridstring 
    render :text => session[:userid] 
end 

Примечание: Тем не менее, после выполнения этого в хроме, Я изучаю печенье и никто не установлен ...

затем в том же контроллере, но в другом действии, я пытаюсь читать сессии, как это:

def readsession 
    userId = session[:userid] 
    render :text => userId 
end 

и ничего не визуализируется .. :(

Есть ли что-нибудь, что я пропустил?

Я попытался после ответа here, которые предполагают, что я поставил config.api_only = false, однако результат тот же (я не имею набора печенья, и при чтении в другом контроллере, сессия еще пуста

Жаль, что это такое . основной вопрос (или начальная конфигурация материи), я все еще очень новый рубина и рельсы ..

+2

Поддержка вашего API используется приложением для мобильных устройств, и как это приложение будет хранить файлы cookie? Конечно, браузер может играть с кукисами, но общее приложение или общий потребитель вашего API, возможно, не смогут этого сделать. Поэтому вам лучше использовать токены для аутентификации. –

+0

@BilalMaqsood: ohh .. да это для мобильных устройств! Я не думал об этом ... как я могу использовать токены для аутентификации? : O –

+0

@BilalMaqsood: cookie действительно доступен в мобильном телефоне, check cookieManager в Android, а NSUrlConnection также обрабатывает файлы cookie автоматически в iOS. Мне бы хотелось знать, как вы обрабатываете маркеры, хотя .. Я знаю разбор.com тоже сделал так –

ответ

3

Поскольку API всегда клиент не зависит, так что лучше использовать маркер для аутентификации

Вот как:

  1. Добавить столбец под названием token в таблице users.
  2. Пользователь приходит и входит в систему.
  3. При входе в систему создается токен (строка случайных символов) и сохраняется в базе данных.
  4. Строка также передается вместе с этим токеном.
  5. Поскольку каждый запрос содержит токен, вы можете проверить токен для его существования базы данных и установить связь с нужным пользователем.
  6. Когда пользователь выйдет из системы, удалите токен из базы данных.
+0

спасибо за объяснение! У вас есть дополнительные ресурсы по этому поводу? Я в настоящее время googling и довольно смущен о поддержке базы данных cookie против токена для аутентификации (который также хранится в db). Они довольно схожие понятие (вы отправляете обратно некоторый идентификатор токена), но могут быть разными, lol –

+1

Несколько Несколько месяцев назад я построил API, и я создал все функции аутентификации с нуля. Это не так сложно. И для вашего случая, если вы вернете другой идентификатор токена, просто скажите пользователю: «Вы должны войти в систему, чтобы получить доступ к этому приложению». Имея только действительный токен, вы можете предположить, что пользователь подписал. –

+0

@HakimHauston, если мой ответ вам помог, вы можете его принять. –

Смежные вопросы