我正在使用Actions on Google
(在手机Google Assistant
上)并使用Account Linking
我已登录Auth0
( 登录窗口 :
image)。
但是,我想在我想要的时候从Auth0
注销,以便我可以从头开始测试整个过程。
我在Python
文档(https://auth0.com/docs/logout)之后的Flask
和Auth0
中编写了以下源代码。
from flask import Flask, render_template, request, jsonify
import requests
app = Flask(__name__)
@app.route("/", methods=['GET', 'POST'])
def index():
session['user'] = 'Poete_Maudit'
data = request.get_json()
if data is not None:
action = data["queryResult"]["action"]
else:
return 'HERE'
# Triggers actions.intent.SIGN_IN which leads to Auth0
if (action == 'sign'):
return jsonify({"payload": {
"google": {
"expectUserResponse": True,
"isSsml": False,
"noInputPrompts": [],
"systemIntent": {
"data": {
"@type": "type.googleapis.com/google.actions.v2.SignInValueSpec"
},
"intent": "actions.intent.SIGN_IN"
}
}
}
})
# I have other if statements below which retrieve the access token
# and do in general other stuff on Actions on Google app
# but it is too long to include it here
@app.route('/logout')
def logout():
session.clear()
return redirect('https://project_id.eu.auth0.com/v2/logout?returnTo=http://127.0.0.1:5000')
if __name__== "__main__":
app.secret_key = os.urandom(24)
app.run(debug=True)
在我执行了整个登录过程一次后,我手动(从浏览器)到http://127.0.0.1:5000/logout
成功地将我重定向到http://127.0.0.1:5000
。在python控制台我得到:
127.0.0.1 - - [06/Jun/2018 14:09:04] "GET /logout HTTP/1.1" 302 -
127.0.0.1 - - [12/Jun/2018 11:03:16] "GET / HTTP/1.1" 200 -
在Auth0
日志部分,我收到Success Logout
(image)。
但是,当我重新启动手机Google智能助理的整个过程时,登录窗口不再出现,我再次登录Auth0
相同的accessToken
。
如何通过清除http://127.0.0.1:5000
上的会话和/或Cookie来正确注销,从而使 Auth0
登录窗口再次出现吗
P.S。
1)请记住,目前我正在使用Python
和ngrok
完成所有这些操作。如果我重新启动ngrok
会话,则会重新显示登录窗口,但显然我想以编程方式执行此操作。
2)请不要把任何事情视为理所当然。在我所做的事情上,我可能会遗漏一些非常基本的东西,所以请随时问我关于此的非常基本的问题。
答案 0 :(得分:5)
我已向Google支持发送了有关该消息的消息,我得到了以下答案:
要取消关联您的帐户,您可以使用此链接 (https://gala-demo.appspot.com),在服务ID字段中输入 项目ID并添加" _dev"最后(在你的情况下,它将是 " Dnipro-Chatbot_dev"),然后点击取消关联我的帐户。
此外,我问他们是否可以通过编程方式进行此操作(而不仅仅是手动完成),我得到了以下答案:
我不确定这是否可以用Python做,但你可以试试 以下:如果您可以从您的oauth发回401状态代码 令牌交换端点。 401将告诉AoG访问令牌 无效并强制AoG再次启动帐户链接流程。 希望这可以帮到你。
总之,您可以使用上面的链接取消帐户链接,因为我测试它并且工作正常。关于第二个答案,我不确定这是否完全可能,至少在说明的方式。您无法以编程方式从Auth0发送401状态代码。您可以在Auth0上执行的操作是将Auth0应用程序的JWT的到期时间设置得非常低(例如60秒),并以此方式强制撤销访问令牌。但这不是一个真正的程序化解决方案,我还没有测试过它。
答案 1 :(得分:2)
Auth0中的/v2/logout
端点用于从前端通道(即浏览器)使用,因此您的后端应用程序应返回指向302
的{{1}}重定向响应端点(如果要在清除会话后将用户重定向回特定URL,则可以使用文档中所述的/v2/logout
参数。
通过现在正在执行反向通道请求(服务器到服务器),会话cookie丢失,因此Auth0不知道要终止哪个会话。
另请注意,returnTo
端点会清除Auth0 中的会话,但您还必须清除应用中的会话。如果使用Flask,请查看这些Flask session.clear examples。