ユーザーがDjangoで自分のパスワードを変更できるようにするにはどうすればよいですか?


84

ユーザーがDjangoで自分のパスワードを変更できるコードを教えてもらえますか?


15
グーグルが私たちにそれらについて考える代わりに答えを検索させた場合、stackoverflowは私たちにそれらを検索する代わりに答えを求めさせます。
sykora 2009

2
'plzsendmetehcodes'の場合​​は-1。ところで、あなたはあなたの質問に正しい答えを受け入れるべきです。
Cat Plus Plus

8
ええ、私はグーグルをよく使っていましたが、今でもそうしています。しかし、SOはより簡単で高速であり、ディスカッションに参加して別の回答を聞くことができます。Svetlozer Angelovやその他の人々が、簡単な質問に答えるために時間を費やして(そしてポイントを獲得して)喜んでいる限り、それがSOの目的です。
DOK

7
Djangoには非常に包括的で簡単にアクセスできるドキュメントがあるため、SOの回答でこれまでにすべてのドキュメントを複製しようとする継続的な試みは、おそらく価値を付加することはできません。
ベンジェームス

3
@ベンジェームス:そのような良い点。実際、それが私の回答のドキュメントを書き直す代わりに、ベアボーン情報とドキュメントへのリンクを提供する理由です。
cethegeek 2009

回答:


159

Djangoにはユーザー認証システムが付属しています。ユーザーアカウント、グループ、権限、およびCookieベースのユーザーセッションを処理します。このドキュメントでは、物事がどのように機能するかについて説明します。

Djangoのパスワードを変更する方法

パスワード変更のセクションを参照してください

  1. manage.pyファイルがあるプロジェクトへのナビゲーション

  2. $ python manage.py shell

  3. 以下のスクリプトを入力してください:

django.contrib.auth.modelsからユーザーをインポート
u = User.objects.get(username__exact = 'john')
u.set_password( '新しいパスワード')
u.save()

簡単なmanage.pyコマンドを使用することもできます。

manage.py changepassword *username*

新しいパスワードを2回入力するだけです。

ドキュメントの「パスワード変更」セクションから。


にが含まれている場合は、django.contrib.adminINSTALLED_APPSアクセスできます。example.com/path-to-admin/password_change/これには、古いパスワードを確認し、新しいパスワードを2回入力するためのフォームがあります。


14
これは、ユーザーが自分のパスワードを変更するためのページを作成するのに役立つとは思いません。管理者だけが変更できます。
ミカウォルター

25

django.contrib.auth.views.password_changeURLconfのビューを使用することもできます。デフォルトのフォームとテンプレートを使用します。独自の供給はオプションです。


4

シェルに移動してpasswdを入力し、passwdを再入力する必要はありません。

 python manage.py changepassword <username> 
  or
/manage.py changepassword <username>

シェルの使用

python manage.py shell
from django.contrib.auth.models import User
users=User.objects.filter(email='<user_email>') 
  #you can user username or etc to get users query set
  #you can also use get method to get users
user=users[0]
user.set_password('__enter passwd__')
user.save()
exit()


2

このチュートリアルは、関数ベースのビューでそれを行う方法を示しています。

ファイルを閲覧する:

from django.contrib import messages
from django.contrib.auth import update_session_auth_hash
from django.contrib.auth.forms import PasswordChangeForm
from django.shortcuts import render, redirect

def change_password(request):
    if request.method == 'POST':
        form = PasswordChangeForm(request.user, request.POST)
        if form.is_valid():
            user = form.save()
            update_session_auth_hash(request, user)  # Important!
            messages.success(request, 'Your password was successfully updated!')
            return redirect('change_password')
        else:
            messages.error(request, 'Please correct the error below.')
    else:
        form = PasswordChangeForm(request.user)
    return render(request, 'accounts/change_password.html', {
        'form': form
    })

URLファイル:

from django.conf.urls import url
from myproject.accounts import views

urlpatterns = [
    url(r'^password/$', views.change_password, name='change_password'),
]

そして最後に、テンプレート:

<form method="post">
  {% csrf_token %}
  {{ form }}
  <button type="submit">Save changes</button>
</form>

1

Ciro Santilliの回答に示されているようにURLパターンが追加されたら、ユーザーがパスワードを変更できるようにする簡単な方法は、管理機能への「スタッフアクセス」をユーザーに与えることです。グループに追加したり、特別な権限を付与したりしない場合でも、example.com / adminページにアクセスしてパスワードを変更できます。スタッフのアクセスにより、ページが空白の場合でもページに移動できます。右上隅にある[パスワードの変更]をクリックして、管理機能を使用できます。


1

これは、そのスローで問題が発生した場合に備えて、私が使用したコマンドAttributeError: Manager isn't available; 'auth.User' has been swapped for 'users.User'です。

python manage.py shell -c "from django.contrib.auth import get_user_model; 
User = get_user_model(); 
u = User.objects.get(username='admin'); 
u.set_password('password123');
u.save()"

1

パードキュメント、使用:

from django.contrib.auth.hashers import makepassword

これを行う主な理由は、Djangoがハッシュされたパスワードを使用してデータベースに保存するためです。

password=make_password(password,hasher='default')
obj=User.objects.filter(empid=emp_id).update(username=username,password=password)

この手法を、モデルから派生したカスタムユーザーモデルに使用しましたAbstractUser。クラスとサブクラスのスペルを技術的に間違えた場合は申し訳ありませんが、テクニックはうまくいきました。


0

@Ciroの回答と非常に似ていますが、元の質問に固有です(すべての認証ビューを追加しません)。

に追加するだけurlpatternsですurls.py

url('^change-password/$', auth_views.password_change, {'post_change_redirect': 'next_page'}, name='password_change'),

post_change_redirectパスワードが変更された後にリダイレクトするURLを指定することに注意してください。

次に、テンプレートに追加するだけです。

<a href="{% url 'password_change' %}">Change Password</a>
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.