2010-10-27 4 views
0

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

  1. Я создам модуль в моей/Lib папки /lib/auth.rb
  2. взыщу этот модуль в моем ApplicationController.
  3. Когда пользователь вводит свой адрес электронной почты + пароль, я вызову метод, который будет выполнять поиск в пользовательской таблице для пользователя с тем же адресом электронной почты, после чего я буду сравнивать пароли. (позже я добавлю шифрование с солью).
  4. Если пользователь ввел правильные учетные данные, я создам строку в таблице Sessions, а затем напишу GUID сеанса в файл cookie.
  5. Теперь, когда мне нужно проверить, вошел ли пользователь в систему, или мне нужен объект пользователя, я проверю, существует ли файл cookie, если это произойдет, я буду искать таблицу сеанса для строки с тем же директором, если он существует, я верну строку сеанса, а затем загружу объект User.

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

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

Как получить доступ к current_user из моих представлений?

P.SЯ знаю другие системы аутентификации, я просто хочу научиться создавать свои собственные.

ответ

1

Правильная логика, за которой вы следуете, верна. Конечно, вы всегда можете расширить это с помощью функций, которые вам нужны. Например, вам понадобятся вспомогательные методы для таких вещей, как «logged_in?» и "current_user". Кроме того, вам может потребоваться добавить срок действия сеанса или сохранение сеанса в качестве функции «запомнить меня».
Пойдите для этого, вы не будете изучать системы аутентификации лучше, чем создавать свои собственные, а затем вычислять, что с ним не так.

0

После того, как Файзаль сказал, что я скажу, я дам вам ответ на последнюю часть вашего вопроса: «Как я могу получить доступ к current_user из моих представлений?»

попробовать что-то вроде этого:

class User < ... 
    def self.current=(u) 
    @current = u 
    end 
    def self.current 
    @current 
    end 
end 

В своих взглядах (или любой части вашего кода) вы можете позвонить User.current. Контроллер должен назначить проверяемого пользователя User.current. Ваши фильтры могут реагировать на «если User.current.nil?» и так далее.

Если вы хотите быть потокобезопасным, вы можете использовать переменную нить вместо @current:

Thread.current[:current_user] = u 
Смежные вопросы