Я бы создал модель профиля
, которая автоматически создается для любого пользователя, который посещает ваш сайт и добавляет первое избранное, оценивает первый элемент и т. Д. Профиль
должен быть сохранен в вашей базе данных, включая подходящую случайную и уникальную строку. Эта строка может быть сохранена в виде файла cookie на стороне клиента и позже будет использоваться для получения вашего профиля. Он должен быть случайным и достаточно длинным, чтобы вы не могли легко подделать свой файл cookie и получить профили других анонимных людей, но этого нельзя полностью избежать (так что будьте осторожны, вы не храните конфиденциальные данные в анонимных профилях!).
После регистрации пользователя , вы можете связать их профиль
с их новой записью пользователя
и удалить файл cookie и уникальный строковый идентификатор.
Во всем приложении вы можете решить использовать эту информацию только тогда, когда пользователь вошел в систему. Вы можете определить before_filter
, который захватывает текущего пользователя, и только если есть реальный пользователь, вошедший в систему, вы используете данные профиля:
class ApplicationController < ActionController::Base
before_filter :fetch_user_data
def fetch_user_data
@current_user = ... # Work your magic to get current user
end
private
def current_profile
@current_user and @current_user.profile # Use profile association
end
end
Где-то в действии контроллера:
if current_profile
# Do stuff with current_profile
# Only available to registered users...
end
Вы можете позже изменить реализацию current_profile
, если передумаете и хотите, чтобы анонимные профили имели эффект для ваших анонимных пользователей.
Единственный способ идентифицировать пользователей - использовать файлы cookie. Сайт, который вы использовали, вероятно, делает следующее:
Пользователь впервые создает запись в таблице «Пользователи» и добавляет их в группу «Гости». Сохраните файл cookie с идентификатором на компьютере пользователя, чтобы вы могли найти его позже.
Если пользователь решит зарегистрироваться, вы можете заполнить остальные его данные в таблице пользователей (возможно, вы даже захотите создать отдельную таблицу для получения сведений о пользователях и регистрационных данных, таких как имя пользователя / пароль и т. д.) и добавьте их в группу зарегистрированных пользователей.
Способ управления своими группами может быть таким же простым, как флаг в базе данных.
Как это вопрос рельсов ...
Я бы, вероятно, обработал большую часть этого в before_filter в вашем application_controller.rb. Шаги будут примерно такими:
if has_cookie
@user = lookup_user
else
@user = create_new_guest_user
end
Для этого можно очень легко расширить одну из существующих структур аутентификации, например act_as_authenticated или Clear.