gpt4 book ai didi

ruby-on-rails - 从 Doorkeeper 提供商的多个应用程序中单点注销

转载 作者:行者123 更新时间:2023-12-04 01:07:01 25 4
gpt4 key购买 nike

我正在为我的 Rails 应用程序使用 Doorkeeper,并且我正在尝试使当用户从 doorkeeper 提供商注销时,用户将自动从所有应用程序注销。

默认情况下,当用户退出应用程序时,他仍将在看门人提供商应用程序中登录。

这是我的 Doorkeeper 提供商的 session Controller 。

class SessionsController < ApplicationController
def new
redirect_to root_path if current_user
session[:return_to] = params[:return_to] if params[:return_to]
end

def create
user = User.find_by_email(params[:email])
if user && user.authenticate(params[:password])
session[:user_id] = user.id
if session[:return_to]
redirect_to session[:return_to]
session[:return_to] = nil
else
redirect_to root_path

end
else
flash.now.alert = "Email or password is invalid"
render "new"
end
end

def destroy
session[:user_id] = nil
flash[:alert] = "Sign Out successfully"
redirect_to new_session_path
end
end

这是我的一个应用程序中的 session Controller :
    class SessionsController < ApplicationController
def create
auth = request.env["omniauth.auth"]
user = User.find_by_provider_and_uid(auth["provider"], auth["uid"]) || User.create_with_omniauth(auth)
session[:user_id] = user.id
session[:access_token] = auth["credentials"]["token"]
redirect_to root_url
end

def destroy
session[:user_id] = nil
session[:access_token] = nil
redirect_to root_url
end
end

我为 Doorkeeper 提供商应用编写了自己的用户身份验证,但我使用 Devise 为自己的应用程序连接到我的 Doorkepeer 提供商应用程序。

目前,当我退出我的 Doorkeeper 应用程序时,我仍然在我的另一个应用程序中登录。那么我如何才能让我从 Doorkeeper 注销,这也会让我从所有应用程序中注销?

最佳答案

您必须从 doorkeeper 应用程序向每个客户端应用程序发送 API 调用,告诉他们删除特定用户的 session ,或者您需要让客户端应用程序定期查询 doorkeeper 应用程序以确保 session 或访问 token 仍然存在活跃。后者可能是更好的策略,尽管它最终会进行更多的 API 调用。

关于ruby-on-rails - 从 Doorkeeper 提供商的多个应用程序中单点注销,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31715385/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com