#ruby-on-rails-3 #devise
#ruby-on-rails-3 #разработка
Вопрос:
Я использую Devise для аутентификации, и когда кто-то посещает определенный URL (с определенными параметрами в URL), я хотел бы присвоить ‘current_user’ определенное значение из базы данных.
Как мне это сделать?
Кроме того, должен ли я убедиться, что все требования к проверке выполнены? Например, моя пользовательская модель имеет:
validates_presence_of :username, :email
Если я установлю current_user, должен ли я установить оба:username amp;: email, или я могу просто сделать одно или другое?
Ответ №1:
Вы могли бы попробовать
@user = User.where(:x => "y").first # Find the user depending on the params
sign_in(@user)
# do work
sign_out(@user)
Я не знаю, лучший ли это способ сделать это, но он установится current_user
.
Комментарии:
1. Ну, дело в том, что, если
@user
я хочу установить, это не из моделиUser
, а из другой моделиClient
, которая не управляется Devise? т. Е. у меня есть две модели.Users
Модель иClients
model. Уclient
A есть только адрес электронной почты. Нет имени пользователя, нет pw или чего-либо еще. Тогда как уuser
целых девять ярдов. Итак, я хотел бы переопределитьuser
с помощью клиента, если существуют некоторые параметры.2. Разработка наборов
current_user
, специфичных для пользователя. Я думаю, если у вас определены отношения пользователь-клиент, вы могли бы сделать что-то вродеsign_in(@client.user)
, или ваш@user = User.where(:email => @client.email)
нашел бы пользователя и затем зарегистрировал его.3. Похоже, это не работает, если у вас есть клиент без файлов cookie
Ответ №2:
current_user
помощник devise устанавливает переменную экземпляра @current_user, поэтому делает это:
@current_user = User.first
также будет установлен current_user для выбранного пользователя.
Комментарии:
1. Он фактически устанавливает текущего пользователя, но на самом деле не регистрирует его, поскольку фильтр проверки подлинности перед не пройдет. Поэтому будьте осторожны при этом.