Ваша помощь очень ценится и ценится. Заранее благодарим, если вы уделите немного времени чтению этой проблемы и в конечном итоге ответите.
Я работаю со стандартной системой аутентификации, хранящей user_id и запомнить_token в файлах cookie. При заполнении формы входа в систему для этого пользователя генерируется новый токен, который сохраняется в файлах cookie следующим образом:
# Remembers a user in a persistent session.
def remember(user)
user.remember # Generates a remember token + digest and saves the digest on the user side
cookies.signed.permanent[:user_id] = user.id
cookies.permanent[:remember_token] = user.remember_token
end
Я заметил проблему, когда после отправки формы с правильными данными для входа пользователь всегда сразу же был перенаправлен обратно на страницу входа.
Это потому, что user_id и Remember_token были равны нулю при достижении действия после сеанса # create. Они также не появились в консоли браузера (пробовал на Safari и Chrome с одинаковыми результатами). Я думал, что куки были потеряны во время перенаправления.
Но, играя дальше, я включил попытки записать куки непосредственно на обычном действии 'get' перед любым перенаправлением:
class SessionsController < ApplicationController
def new
cookies[:hello] = {value: 'store_me_please', expires: 10.years.from_now}
cookies.permanent[:a_true_cookie] = true
cookies.permanent.signed[:remember_me] = 123
session[:hello] = 'store_me_in_session_please'
if logged_in?
redirect_to user_path(current_user)
else
render layout: "unauthenticated"
end
end
end
И заметил что хранилище cook ie в браузере всегда остается пустым при доступе к действию. Ничего не будет записано.
Я думал, что это может быть вызвано проблемой защиты csrf, поскольку rails может очистить сеанс, если он не может аутентифицировать свой токен. Поэтому я прокомментировал «protect_from_forgery» в application_controller, но не увидел никаких изменений.
Кажется, что secret_key_base находится в новом файле credentials.yml; хотя это первое приложение Rails 5.2, для которого я имею дело с такими проблемами, поэтому я мог что-то упустить в конфигурации.
Я также добавил следующую строку конфигурации в application.rb, который затем вызывает «ActionController»: : InvalidAuthenticityToken "исключение при отправке формы, несмотря на закомментированную строку" #protect_from_forgery with:: exception ".
config.session_store :cookie_store
Мне кажется, что файлы cookie никогда не отправляются приложением Rails в браузер. Что может вызвать такое поведение?