Ядро моего приложения построено с Michael Hartl's rails tutorial. Недавно я сменил User DB, так что столбец name
имеет имя username
, а также добавил в friendly_id для более красивых URL-адресов. Я обновлялся везде, где мог найти в соответствии с этими изменениями, и все работает плавно, за исключением дружественной пересылки после входа пользователя в систему. если пользователь, не зарегистрированный пользователем, посещает страницу редактирования пользователя, они попадают на страницу входа в систему, после входа в систему они должны быть отправлены на страницу редактирования. Но вместо этого он просто регистрирует их и остается на странице входа.Дружественная переадресация после входа в систему не работает после добавления friendly_id в модель пользователя
Я не могу видеть где-нибудь, что нужно бы изменения, так что снова работает и от того, что я могу видеть, он должен работать
контроллер сеанса
def create
user = User.find_by(email: params[:session][:email].downcase)
if user && user.authenticate(params[:session][:password])
log_in user
params[:session][:remember_me] == '1' ? remember(user) : forget(user)
redirect_back_or user
else
flash.now[:danger] = 'Invalid email/password combination'
render 'new'
end
end
контроллера пользователя
before_action :correct_user, only: [:edit, :update]
before_action :logged_in_user, only: [:edit, :update]
def edit
end
private
# Confirms a logged-in user.
def logged_in_user
unless logged_in?
store_location
flash[:danger] = "Please log in."
redirect_to login_url
end
end
def correct_user
@user = User.friendly.find(params[:id])
redirect_to(root_url) unless current_user?(@user)
end
прикладной контроллер
def redirect_back_or(path)
redirect_to request.referer || path
end
private
# Confirms a logged-in user.
def logged_in_user
unless logged_in?
store_location
flash[:danger] = "You gotta login first!"
redirect_to login_url
end
end
сессия помощник
# Redirects to stored location (or to the default).
def redirect_back_or(default)
redirect_to(session[:forwarding_url] || default)
session.delete(:forwarding_url)
end
# Stores the URL trying to be accessed.
def store_location
session[:forwarding_url] = request.url if request.get?
end
Каждый знает, где эта проблема может лежать?
Update
после беседы с @vishal перенаправления осуществляются от контроллера приложения redirect_back_or
метода
def redirect_back_or(path)
redirect_to request.referer || path
end
Если изменить его
def redirect_back_or(path)
redirect_to root_path || path
end
Я доставлен в корневой путь, поэтому я знаю эту строку, скорее всего, виновницу.
Промежуток он работает и не работает Я добавил mailboxer камень для личных сообщений, изменил пользователям БД name
к username
и добавил friendly_id в username
колонке. Возможно, что-то может выделиться из-за вас, потому что он перестает работать.
У вас есть 'before_action: logged_in_user' в вашем UserController? 'Store_location' вызывается только в' logged_in_user', который, похоже, не был добавлен как фильтр before. – Vishal
@ Вишал забыл добавить его.Я обновил вопрос сейчас – Rob
Можете ли вы включить свой метод 'store_location'? – Vishal