Как получить доступ вошедшего в систему пользователя из контроллера в рельсах 3 - PullRequest
1 голос
/ 12 июля 2011

Я пытаюсь создать систему входа в Rails 3, где я могу получить доступ к вошедшему в систему пользователю не только из представлений, но и с уровня контроллера / модели.Причина в том, что я хочу адаптировать функциональность в соответствии с системой привилегий, в которой вошедшие в систему пользователи могут выполнять функции, отличные от тех, в которые не вошли.1003 * railstutorial.com, глава 9 .

Когда я использую систему входа в систему только из представления, она работает.Однако, если я пытаюсь использовать систему через контроллер, я получаю сообщение об ошибке undefined method 'cookie_jar' for nil:NilClass.

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

Ответы [ 3 ]

4 голосов
/ 12 июля 2011

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

Если вы хотите, чтобы разные пользователи выполнялиразличные функции, это контроль доступа, и для этого вам, вероятно, нужно что-то вроде cancan или ACL

И вы хотите получить доступ к зарегистрированному пользователю на уровне модели?Опять же, лучшая практика - «не надо».Модель не должна интересовать текущего пользователя, который вошел в систему - это вопрос для контроллера.

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

И, наконец, если вы действительно, действительно хотите сделать все этос нуля, взгляните на этот Railscast

0 голосов
/ 13 июля 2011

Если все сделано в соответствии с руководством, вы сможете получить current_user от контроллеров и представлений. Есть также еще одно руководство по аутентификации на asciicasts.com от Райана Бейтса. Возможно, вы захотите изучить его, если вы только запускаете Rails, но для реальных приложений настоятельно рекомендуется использовать Devise или AuthLogic , которые тщательно протестированы и постоянно развиваются.

0 голосов
/ 13 июля 2011

Чрезвычайно простой способ сделать это, как указано в эпизоде ​​Railscast: http://railscasts.com/episodes/20-restricting-access Как упоминалось в приведенном ниже скриншоте, вы можете использовать плагин acts as authenticated (http://www.railsrocket.com/acts_as_authenticated-plugin) для всех потребностей вашей пользовательской модели.

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