Python 如何实施";以“登录”;带有“stormpath”的管理函数`

Python 如何实施";以“登录”;带有“stormpath”的管理函数`,python,flask,stormpath,Python,Flask,Stormpath,我正在为我们的管理仪表板实现“登录为”功能 基本上,我希望允许我们的管理员查看和使用该网站,就好像她已作为特定客户登录一样。例如,如果Trish给我们打电话问了一个问题,我们的管理员应该能够以Trish的身份登录,并准确地看到Trish看到了什么 下面是我编写的代码,假设我们有一封有效的电子邮件: from app import stormpath_manager from flask.ext.stormpath import login_user ... main_cloud_directo

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

基本上,我希望允许我们的管理员查看和使用该网站,就好像她已作为特定客户登录一样。例如,如果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没有属性'is\u active'
返回

要为此设置上下文,请执行以下操作:

  • 我知道
    login\u user
    希望看到扩展
    stormpath.resource.Account
    user
    对象,而我们收到的
    Account
    对象没有定义

  • 如果我发送
    login\u user
    stormpath\u account=StormpathUser.create(…)
    方法返回的
    user
    对象,则应用程序的其他部分的代码工作正常

  • 我还意识到我正在将
    stormpath flask
    与原始
    stormpath python sdk
    混合使用,我想我真的应该使用
    stormpath flask
    方法

  • 我可以看到,通过
    Account.email
    ,我可以使用
    User.from\u login
    创建一个
    User
    对象,但这不起作用,因为我们没有在终端存储密码

  • 我想知道有什么方法可以将
    搜索
    方法返回的
    帐户
    转换为
    用户
    ?你会怎么做才能让它工作

    谢谢


    Alex

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

    答案是肯定的:您确实可以将普通的
    帐户
    对象转换为有效的
    用户
    对象。以下是方法:

    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)
    
    重要的一点是
    帐户。这使用了一些元魔术将类转换为
    用户
    对象=)这也是我在库中的幕后工作,例如:


    希望有帮助

    啊哈!这是在最好地使用Python。太好了,先生!