2016-05-25 1 views
1

管理ダッシュボードの「ログイン」機能を実装しています。「stormpath-flask」で「login as」管理機能を実装する方法

基本的には、管理者が特定の顧客としてログインしているかのようにウェブサイトを見たり、使用したりすることができます。たとえば、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'背中を得た:ここ

そして、私たちは、有効なemailを持っていると仮定すると書いたコードです。このためにコンテキストを設定する

  1. 私はlogin_userたちは何is_activeが定義されていない持っている受信accountオブジェクトに対しstormpath.resource.Accountを拡張Userオブジェクトを見ることが期待されていることを理解しています。私はstormpath_account = StormpathUser.create(...)メソッドによって返さlogin_userUserオブジェクトを送信する場合

  2. 私はアプリがうまく働くの他の部分のコードを持っています。

  3. また、私は生のstormpath-python-sdkstormpath-flaskを混合していると私は私は本当にstormpath-flaskメソッドを使用してする必要があることを推測することを認識しています。

  4. 私は Account.emailと、私は User.from_loginを使用して Userオブジェクトを作成することができますが、我々は最後にパスワードを保存しないので、これは動作しませんことがわかります。

私はsearchメソッドによって返さAccountを取り、Userにそれを回すことができますどのような方法があります思ったんだけど?これを機能させるためにあなたは何をしますか?

おかげで、

アレックス

答えて

1

私はこのライブラリの作者だ、そう=ここでホップしたかった)

答えはイエスです:あなたは確かに通常の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

+1

Aha!それはPythonを最高級に使っています。名誉毀損! –

関連する問題