python - 如何用 "login as"实现 `stormpath-flask`管理功能

标签 python flask stormpath

我正在为我们的管理仪表板实现“登录身份”功能。

基本上,我希望允许我们的管理员查看和使用该网站,就像她以特定客户身份登录一样。例如,如果 Trish 调用我们并提出问题,我们的管理员应该能够以 Trish 身份登录并准确查看 Trish 所看到的内容。

这是我编写的代码,假设我们有一个有效的电子邮件:

from app import stormpath_manager
from flask.ext.stormpath import login_user
... 
main_cloud_directory = stormpath_manager.client.directories.search({
    'name': 'Directory Name'})[0]
accounts = main_cloud_directory.accounts.search({'email': email})
if accounts.size == 1:
    account = accounts[0]
    login_user(account, remember=False)
    return redirect('/settings')
else:
    abort(404)

当我运行代码时,我收到AttributeError: Account has no attribute 'is_active'

为此设置上下文:

  1. 我了解 login_user 期望看到一个扩展 stormpath.resource.AccountUser 对象,而 我们收到的 account 对象没有定义 is_active

  2. 如果我发送 login_userstormpath_account = StormpathUser.create( 返回的 User 对象,则应用程序其他部分的代码可以正常工作...) 方法。

  3. 我还知道我将 stormpath-flask 与原始 stormpath-python-sdk 混合在一起,我想我真的应该使用 stormpath-flask 方法。

  4. 我可以看到,通过 Account.email,我可以使用 User.from_login 创建一个 User 对象,但这不会'不起作用,因为我们不存储密码。

我想知道是否有什么方法可以获取 search 方法返回的 Account 并将其转换为 User?你会做什么来让它发挥作用?

谢谢

亚历克斯

最佳答案

我是这个库的作者,所以想跳到这里 =)

答案是肯定的:您确实可以将普通的 Account 对象转换为有效的 Flask-Stormpath User 对象。方法如下:

from flask.ext.stormpath import login_user
from flask.ext.stormpath.models import User

from app import stormpath_manager


# ...


main_cloud_directory = stormpath_manager.client.directories.search({
    'name': 'Directory Name'
})[0]
accounts = main_cloud_directory.accounts.search({'email': email})

if accounts.size == 1:
    account = accounts[0]
    account.__class__ = User
    login_user(account, remember=False)

    return redirect('/settings')
else:
    abort(404)

重要的一点是account.__class__ = User。这使用一些元魔法将类转换为 User 对象 =) 这也是我在库中幕后所做的事情,例如: https://github.com/stormpath/stormpath-flask/blob/4185f2f41574156870ce1aa990d34e4ad84357be/flask_stormpath/models.py#L125-L126

希望有帮助!

关于python - 如何用 "login as"实现 `stormpath-flask`管理功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37449052/

相关文章:

java - Stormpath idSite 环境身份验证问题

python - python 分割数组

python - 从命令行执行 Django Shell 命令

python - Flask 蓝图和登录重定向问题

python - 从 HTTP 请求运行后台任务

javascript - express-stormpath 无法识别要在 Heroku 上初始化的环境变量

python - 使用 SparkNLP 时,无法在 Dataproc 集群中读取本地数据

python - 将 SConstruct 代码划分为一组别名;默认情况下不调用任何代码

Flask DateTime 不会设置为默认 datetime.utcnow

node.js - 调用和保存用户帐户自定义数据