Как проверить работоспособность логина или нет в ruby ​​на рельсах? - PullRequest
1 голос
/ 29 мая 2019

Я новичок в рубине на рельсах. Я создаю простую функцию входа в систему.

Но страница входа не прошла, даже если учетные данные действительны.

Я не знал, почему это происходит. Пожалуйста, помогите, какую ошибку я совершил.

Я прилагаю мой код ниже,

Контроллер userlists_controller.rb

  def login
  end

  def login_action
      user = Userlist.find_by(email: params[:email])
      if user and user.authenticate(params[:password])
        session[:user_id] = user.id
        session[:user_name] = user.name
        redirect_to user, alert: "User logged in successfully"
      else
        redirect_to login_url, alert: "Invalid user/password combination"
      end
  end

Просмотр login.html.erb

<h1>Login</h1>
<% if flash[:alert] %>
    <div id="error_explanation">
        <p id="notice"><%= flash[:alert] %></p>
    </div>
<% end %>

<%= form_tag do %>
    <div class="field">
        <%= label_tag :email, 'Email' %>
        <%= email_field_tag :email, params[:email] %>
    </div>
    <div class="field">
        <%= label_tag :password, 'Password' %>
        <%= password_field_tag :password, params[:password] %>
    </div>
    <div class="actions">
        <%=submit_tag "Login" %>
    </div>
<% end %>

route route.rb

  get 'login' => 'userlists#login'
  post 'login' => 'userlists#login_action'

Ответы [ 2 ]

1 голос
/ 30 мая 2019

Попробуйте вот так в login.html.erb

<h1>Login</h1>
<% if flash[:alert] %>
    <div id="error_explanation">
        <p id="notice"><%= flash[:alert] %></p>
    </div>
<% end %>

<%= form_tag '/login', {:method => :post } do  %>
<div class="field">
    <%= label_tag :email, 'Email' %>
    <%= email_field_tag :email, params[:email] %>
</div>
<div class="field">
    <%= label_tag :password, 'Password' %>
    <%= password_field_tag :password, params[:password] %>
</div>
<div class="actions">
    <%=submit_tag "Login" %>
</div>
<% end %>

Попробуйте это в userlists_controller.rb для метода login_action

def login_action
  user = Userlist.find_by(email: params[:email])
  if user and user.authenticate(params[:password])
    session[:user_id] = user.id
    session[:user_name] = user.name
    redirect_to root_url, alert: "User logged in successfully"
  else
    redirect_to login_url, alert: "Invalid user/password combination"
  end
end

И, наконец, проверьте user = Userlist.find_by(email: params[:email]) объект. Вы получаете какие-либо значения или нет.

0 голосов
/ 30 мая 2019

Я просто хочу опубликовать комментарий здесь в качестве ответа, чтобы люди знали, что он работает

Примечание: redirect_to user работает, потому что user является экземпляром User и как таковой эквивалент / ярлык написания user_path(user). Вместо op puts я бы порекомендовал использовать Rails.logger.debug "some message"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...