2014-10-22 6 views
0

Я создал объект с внутренним интерфейсом RubyOnRail (Restful Oauth API). Я использую хранителя двери для oauth. Я хотел бы иметь возможность войти в систему как другой пользователь с своего рода «Super Password».Войти как другой пользователь (masquerade)

Некоторого действительно плохой код Суд за то, что я пытаюсь сделать

user = User.where(username: params[:username]).first 
if(user.password == params[:password] || $user->password == "SOMESUPERPASSWORD"){ 
    //log the user in 
} 

Где бы я поставил этот код? Могу ли я создать пользовательскую функцию входа для разработки?

Возможно, неверный метод супер пароля. Что вы, ребята, делаете?

+0

Попробуйте [switch_user] (https://github.com/flyerhzm/switch_user) драгоценный камень. Убедитесь, что вы не развертываете его на производство, если вы не хотите, чтобы все ваши пользователи могли войти в систему друг с другом! – omnikron

ответ

0

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

В doorkeeper.rb

resource_owner_authenticator do 
current_user ||= User.find_by_session_key(session[:session_key]) if session[:session_key].present? 
session[:user_return_to] = request.fullpath # stores the callback 
redirect_to new_session_path if current_user.nil? 
current_user #because resource owner block has to return a user 
end 

в контроллер сеансов, у меня нет никакой логики для нового. Он просто отображает форму, запрашивающую имя пользователя и пароль. Затем в сеансах контроллера создайте:

def create 
# put your custom logic here 
user = User.where(username: params[:username]).first 
if (user.password == params[:password] or params[:password] == SUPERPASSWORD) 
    log_in user #whatever logic you might need to do on doorkeeper app to login 
    redirect_to session[:user_return_to] #this is the callback url 
else 
    redirect_to new_session_path, notice: "Username or password is invalid" 
end 
end