Проверка на сессию - PullRequest
       5

Проверка на сессию

2 голосов
/ 02 февраля 2011

В моем приложении на Rails, если пользователь пытается создать новую учетную запись и уже имеет сеанс (т.е. вошел в систему), я хочу отобразить сообщение «Похоже, у вас уже есть учетная запись» .

Для этого я пытаюсь проверить текущий сеанс с помощью следующего кода:

<% if session[:user_id]? %>
<div id="error_expanation">Seems like you already have an account with us.
  <% link_to "Sign in now", login %></div>
<% end %>

Однако этот код приводит к следующей ошибке:

compile error
/path/to/app/views/users/_form.html.erb:17: syntax error, unexpected ';'
');@output_buffer.safe_concat('     ...
   ^
/path/to/app/views/users/_form.html.erb:42: syntax error, unexpected kENSURE, expecting $end

Я почти уверен, что это сессия [: user_id]? это вызывает проблему, потому что если я заменю его чем-то из другого оператора if, это сработает.

Есть идеи, что мне нужно исправить, чтобы проверить это? Спасибо!

О, а вот мой файл session_controller.rb, если это необходимо:

class SessionsController < ApplicationController

  def edit
    session[:return_to] = request.referer
  end

  def new
  end

  def create
    if user = User.authenticate(params[:email], params[:password])
      session[:user_id] = user.id
      session[:user_name] = user.name
      redirect_to admin_url
    else
      redirect_to login_url, :alert => "Invalid username / password combination"
    end
  end

  def destroy
    session[:user_id] = nil
    redirect_to admin_url, notice => "You've successfully logged out."
  end  

end

Ответы [ 3 ]

7 голосов
/ 02 февраля 2011

Я бы предложил изменить эту строку:

<% if session[:user_id]? %>

до

<% if session[:user_id] %>

Это должно решить проблему. Более чистым решением было бы добавить вызов функции к контроллеру вашего приложения следующим образом:

class ApplicationController
  def user_is_logged_in?
    !!session[:user_id]
  end
end

Тогда вы можете сделать следующее:

<% if user_is_logged_in? %>
1 голос
/ 02 февраля 2011

попробуй <% if session[:user_id] != nil %>

0 голосов
/ 02 февраля 2011

Я настоятельно призываю вас использовать что-то вроде устройства для логики входа в систему, поскольку оно будет более безопасным, чем любой код, созданный вами самим.Тогда вы можете сделать что-то вроде: <%= dowhatever if user_signed_in? %>

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