#ruby-on-rails #ruby
#ruby-on-rails #ruby
Вопрос:
У меня возникают проблемы при попытке входа в мое приложение Rails. Я пытаюсь войти в систему, и он перенаправляет меня обратно на мою страницу входа. Я проверил, какой пароль я предоставлял, и это соответствует действительности. Это вообще не выдает мне ошибку в браузере. Я проверил свою консоль, и я получаю код 200, который означает, что он нашел страницу.
Вот мои действия / маршруты контроллера
get 'login', to: 'sessions#new', as: 'login'
post 'login', to: 'sessions#create'
Вот мой контроллер сеансов
class SessionsController < ApplicationController
def new
end
def create
user = User.find_by(username: params[:username])
if user amp;amp; user.authenticate(params[:password])
# log_in user
sessions[:user_id] = user.id
redirect_to user_path(user), notice: 'Logged in!'
else
flash.now[:danger] = 'Invalid email/password combination'
render :new
end
end
def destroy
session.delete(:user_id)
redirect_to '/', notice: 'Logged out!'
end
end
и вот моя форма входа.
<h1>Login</h1>
<%= form_tag '/login' do %>
<div>
<%= label_tag :username %><br>
<%= text_field_tag :username %>
</div>
<div>
<%= label_tag :password %><br>
<%= password_field_tag :password %>
</div>
<div>
<%= submit_tag "Log In" %>
</div>
<% end %>
Кто-нибудь может определить, почему он перенаправляет обратно на мою страницу входа?
Комментарии:
1. Что такое redirect_back_or? Где это определено? Я не верю, что это стандартная часть rails.
2. @KaomTe это вспомогательный метод в моем файле sessions_helper. У меня была эта проблема еще до этого, но я на всякий случай перешел на стандарт.
3. Похоже, что в структуре контроллера нет ничего неправильного. Не могли бы вы, пожалуйста, также включить код для
User#authenticate
? Или вы используетеhas_secure_password
?4. Я использую has_secure_password
Ответ №1:
в вашем примере есть
sessions[:user_id] = user.id
не должно ли это быть
session[:user_id] = user.id
session
должно быть в единственном числе
Комментарии:
1. Это исправлено! Спасибо. Я смотрел на это часами и упустил это из виду.