Rails Active Record Query (тестирование пользователя, вошедшего в данный сеанс)

Извиняюсь, но я немного застрял на том, что, по моему мнению, легко исправить. Я создаю приложение rails и просто хочу проверить, есть ли у пользователя, вошедшего в мое приложение, имя Tom. У меня есть пользователь по имени Tom, и когда я вхожу с ним в систему, меня перенаправляют на new_thing_url, указывая, что имя сеанса не Tom.

Я также пробовал user.name="Tom", и это не похоже на работу.

Также я использую Bcrypt для аутентификации

Мой метод создания сеанса в session_controller.rb

          def create
      user=User.find_by(name: session[:name])
      if session[:name] == 'Tom' and user.try(:authenticate,(params[:password]))
        session[:user_id] = user.id
        session[:name] = user.name
        redirect_to admin_url  
      else if user and user.authenticate(params[:password])
      redirect_to new_thing_url
      else
      redirect_to login_url, alert: "Invalid user/password combo"
      end 
      end

      end


\

<% if flash[:alert] %>

<p id="notice"><%= flash[:alert] %></p> 
<% end %>
<%= form_tag do %>
<fieldset>
<legend>Please Log In</legend> <div>
<%= label_tag :name, 'Name:' %>
        <%= text_field_tag :name, params[:name] %>
</div>
        <div>
        <%= label_tag :password, 'Password:' %>
        <%= password_field_tag :password, params[:password] %>
</div> <div>
<%= submit_tag "Login" %> </div>
</fieldset> 
<% end %>

1 ответ

Решение

С этой точки зрения:

user=User.find_by(name: session[:name])
if session[:name] == 'Tom' and user.try(:authenticate,(params[:password]))

Вы не установили session[:name] еще. Вы, вероятно, хотите:

user=User.find_by(name: params[:name])
if params[:name] == 'Tom' and user.try(:authenticate,(params[:password]))
Другие вопросы по тегам