Djangoでプログラムでユーザーにログインするにはどうすればよいですか?ユーザーのユーザー名とパスワードを持っています。彼をログインさせてくれる方法はありますか?
「プログラム的に」以外の方法はありません。もちろん、これは 文書化された です。
from Django.contrib.auth import authenticate, login
user = authenticate(username = username, password = password)
if user is not None:
login(request, user)
プログラムでユーザーをログインするときは常に注意してください。エラー「user has no attribute "backend"
」が発生する可能性があります。それが以前に起こっていない場合は、バックエンドも設定する必要があります。 これを使用するプロジェクト およびいくつかのサンプルコード:
def splash_register(request):
if request.session.get('beta'):
if request.method=='POST':
userform=MyUserCreationForm(request.POST)
if userform.is_valid():
#username of <30 char is required by Django User model. I'm storing username as a hash of user email
user=userform.save(commit=False)
user.username=hash(user.email)
user.backend='Django.contrib.auth.backends.ModelBackend'
user.save()
username=user.username
password=str(userform.cleaned_data['password'])
auth.login(request, user)
request.session['first_visit']=True
return HttpResponseRedirect("/")
else:
userform=MyUserCreationForm(request.POST)
return render_to_response("website/splash_register.html", {'userform':userform}, context_instance=RequestContext(request))
return render_to_response("website/splash_register.html", context_instance=RequestContext(request))
else:
return HttpResponseRedirect('/splash/')
受け入れられた答えは間違いなく機能しますが、私はDjango.contrib.auth.forms.AuthenticationForm
のような組み込みの認証フォームを使用することを好みますDjango
これが重要な部分を示すスニペットです
form = AuthenticationForm(request, data=request.POST)
if form.is_valid():
try:
form.clean()
except ValidationError:
# handle error
login(request, form.get_user())
このアプローチの主な違いは、AuthenticationForm.clean
メソッドがauthentication
関数を呼び出し、User.is_active
もチェックすることです。