以其他用户身份登录(伪装)

时间:2014-10-22 10:18:05

标签: ruby-on-rails ruby ruby-on-rails-4 devise doorkeeper

我构建了一个具有RubyOnRail后端(Restful Oauth API)。我正在使用门卫为oauth。我希望能够以“超级密码”的形式登录其他用户。

我正在尝试做的一些非常糟糕的sudo代码

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

我会把这段代码放在哪里?我可以为设计提供自定义登录功能吗?

也许超级密码方法不正确。你们有什么事?

1 个答案:

答案 0 :(得分: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