2011-01-21 9 views
9

Facebookのfacebookでセッションを認証した後にログインするfacebook-connectアプリを書いていますが、質問はどうやってユーザーオブジェクトを取得した後にdjangoでユーザーを認証できますか?djangoユーザーを取得した後、手動で認証する方法はありますか?

user = User.objects.get(email=email) 
user = authenticate(username=user.username, password=user.password) 
login(request, user) 

これを達成する別の方法はありますか?

答えて

17

あなたがこれを行う場合は、実際には最初の()認証する必要がありません(ただし、私はあなたを教えてくれませんでした!):

user.backend = 'django.contrib.auth.backends.ModelBackend'

login(request, user)

+0

この作品が、それは間違っていますそれを使用するには? – marman

+1

私が知っているわけではありません。ちょうどtrixie! –

+0

あなたのアプリケーションにログインする唯一の場所が、あなたがこれをやっているビューであれば、それほど悪くはありません。 adminログインページやその他のDjango認証システムを使用するには、実際に認証バックエンドを使用する必要があります。 – SeanOC

1

authenticate()login()各々が異なるタスクを提供し、両方の(または同等のDjangoのコードから引き出さとDjangoのバージョンごとに更新)する際にユーザをログインするために必要とされるが。

4

二つがありますあなたはあなたの質問と事例に基づいて見て、気づいていなければならない事柄。

最初に、代替の認証方法(facebook oauthなど)を処理する方法はauthentication backendsです。既存のオプションについてはdjangopackages.comをご覧になるか、独自のオプションを作成してください。あなたが設定したバックエンドは、authenticate()が受け取ろうとしているパラメータを定義するものです(例えば、バックエンドはパスワードとしてパスワードがそのコンテキストでは意味をなさないと予想しません)。

第2に、user.passwordを実行しても、ユーザーの実際のパスワードは取得されません。セキュリティ対策として、Djangoはパスワードをsalted one-way hashesと保存しています。これは、設計上、データベースに格納されているものに基づいてユーザーのパスワードを判断できないことを意味します。

関連する問題