Rails способ ограничить доступ к страницам без сессий - PullRequest
3 голосов
/ 20 марта 2011

Context

Я создаю очень простую, сексуальную страницу регистрации "пофиг на носки" на http://hivechatter.com. (Да, я очень к ней отношусь.)

Корневая страница - это новое действие пользователя, где я запрашиваю только электронную почту. Если посетитель отправляет действительное электронное письмо, создается новый пользователь, и я перенаправляю на страницу редактирования этого пользователя и запрашиваю дополнительную дополнительную информацию.

Задача

URL страницы редактирования имеет обычную форму: http://hivechatter.com/users/19/edit. Посетить страницу редактирования любого пользователя можно, просто посетив этот URL с любым идентификатором, который он выберет.

Вопрос

Как мне ограничить доступ к странице редактирования пользователя, чтобы ее можно было посетить только один раз и только сразу после создания этого user_id из корневой страницы нового пользователя?

Я могу придумать множество методов для исследования. Я был бы признателен за указатель на самый элегантный способ сделать это. Обратите внимание, что мне не нужны никакие дополнительные функции, такие как сеансы и т. Д. Этот двухэтапный процесс регистрации - это то, что мне нужно прямо сейчас.

Спасибо!

Ответы [ 2 ]

2 голосов
/ 20 марта 2011

Добавить новый столбец в таблицу пользователей. Пусть это будет opened_once:boolean с DEFAULT false

Тогда в вашем users_controller

def edit
  @user = User.find( params[:id], :conditions => ['opened_once => ?', false] ) rescue ActiveRecord::RecordNotFound
  @user.update_attribute :opened_once, true
  ...
end

так что теперь он может отображаться только один раз сразу после создания нового пользователя при перенаправлении на страницу редактирования

UPD

Что вы можете сделать более Rails способом? Без добавления нового материала в вашу базу данных и так далее. Вы можете вообще удалить свое действие edit, чтобы ваше представление редактирования отображалось при создании:

def create
  @user = User.new params[:user]
  respond_to do |format|
    if @user.save
      format.html{ render :action => :edit }
    else 
      format.html{ render :action => :new }
    end
  end
end

Пользователь увидит форму редактирования только один раз, если проверка пройдена и его профиль создан.

Так что это конкретно "Rails way":)

0 голосов
/ 20 марта 2011

Смысл cookie - поддерживать состояние в форме сеанса.HTTP по спецификации не имеет состояния, и, если у вас есть входящие пользователи, им нужен сеанс.У RoR отличный обработчик сессий, я рекомендую его использовать.

Единственный другой способ ограничить доступ - использовать файл .htaccess или аналогичный метод basic-auth.Это плохо масштабируется и менее безопасно.

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