Не удается войти в сеанс (Rails)

#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. Это исправлено! Спасибо. Я смотрел на это часами и упустил это из виду.