10

Facebookでセッションを認証した後にユーザーをログインさせるfacebook-connectアプリを書いていますが、ユーザーオブジェクトを取得した後にdjangoでユーザーを認証するにはどうすればよいですか?

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

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

4

3 に答える 3

22

これを行う場合、実際には最初に authenticate() する必要はありません (ただし、私はあなたに言いませんでした!):

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

login(request, user)

于 2011-01-21T04:47:30.957 に答える
4

質問と例に基づいて、注意すべき点が 2 つあります。

まず、代替の認証方法 (Facebook の oauth など) を処理する方法は認証バックエンドです。djangopackages.comで既存のオプションを確認するか、独自のオプションを作成できます。構成したバックエンドは、受信することを期待しているパラメーターを定義するものauthenticate()です (たとえば、Facebook バックエンドは、そのコンテキストではパスワードが意味をなさないため、パスワードを期待しません)。

次に、user.password を実行しても、ユーザーの実際のパスワードは取得されません。セキュリティ対策として、Django はパスワードをソルト付き一方向ハッシュとして保存します。これは、設計上、データベースに格納されている内容に基づいてユーザーのパスワードを決定できないことを意味します。

于 2011-01-21T04:33:50.973 に答える
1

authenticate()それぞれが異なるタスクを提供し、ユーザーをログインさせるにはlogin()両方 (または Django コードから取得し、 Djangoのバージョンごとに更新された同等のもの) が必要です。

于 2011-01-21T03:15:26.247 に答える