Методы проверки того, вошел ли пользователь в систему, не работают для Sinatra Application. - PullRequest
0 голосов
/ 24 мая 2018

У меня есть два вспомогательных метода ниже.

  helpers do
    def logged_in?
     !current_user.nil?
    end

  def current_user
   @current_user ||= User.find(session[:user_id])
  end

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

Просмотр HTML

<html>
<head>
 <title>Simple Meal Prep</title>
   <link href="https://fonts.googleapis.com/css?family=Caveat" 
    rel="stylesheet">
   <link rel="stylesheet" type="text/css" href="/stylesheet.css" />
</head>
<body>
 <h1 id="landing_page_title">Welcome to Cookbook</h1>
 <h2 id="site_logline">A Simple App to keep track of your recipes</h2>
 <br></br>
 <a id="login_button" href="/login">Login</a>  <route 1>
 <br></br>
 <a id="signup_button" href="/signup">Sign Up</a> <route 2>
</body>

Соответствующие маршруты контроллера пользователя

class UserController < ApplicationController

 get '/user_home' do
  if logged_in? then erb :"/users/user_home" else redirect '/' end
 end

 get '/login' do
  if logged_in? then redirect to '/user_home' else erb :"/users/login" 
   end
 end
end 

Ошибкая получаю, когда я нажимаю на кнопку входа в систему и получаю ошибку sinatra, в которой говорится: «ActiveRecord :: RecordNotFound at / login Не удается найти пользователя без идентификатора».Глядя на след от Синатры, я не верю, что мой logged_in?метод работает правильно.Мне интересно, есть ли у кого-нибудь предложения о том, какие шаги предпринять дальше, или я вижу что-то, чего я не вижу.Я могу включить любой дополнительный код или схему, если это необходимо.Благодарю.

1 Ответ

0 голосов
/ 25 мая 2018

Использование find_by(id: session[:user_id]) вместо find(session[:user_id]).

find вызывает ошибку, если передан нулевой идентификатор или не найдена соответствующая запись.find_by не вызывает ошибку ни в одной из этих ситуаций.

Поскольку ваш код допускает, чтобы результат этого запроса был равен нулю (переменная @current_user будет равна нулю, и возвращаемое значение будет равноcurrent_user), похоже, это одно изменение решит вашу проблему.

...