Bagaimana cara mereset kata sandi admin Django?

449

Saya menggunakan Django (versi 1.3) dan lupa nama pengguna dan kata sandi admin. Bagaimana cara mereset keduanya?

Dan apakah mungkin untuk membuat pengguna normal menjadi admin, dan kemudian menghapus status admin?

IamH1kc
sumber

Jawaban:

783
python manage.py changepassword <user_name>

lihat dokumen

JamesO
sumber
7
baru menyadari bahwa Anda mengatakan Anda lupa nama pengguna ... 'admin' menjadi nama pengguna dalam jawaban saya tidak akan banyak membantu kalau begitu!
JamesO
8
@ user794916 Pilihan yang agak aneh jika Anda tidak mengingat nama pengguna. :-)
DrTyrsa
1
Anda dapat mengubah nama pengguna dari "admin" menjadi nama pengguna lain yang tepat. : D
mxi1
4
Django yang terbaik. semuanya begitu mudah
DMTintner
5
Jika Anda lupa nama pengguna, Anda dapat melakukannya manage.py createsuperuseruntuk membuat superuser ke-2, dan kemudian melihat daftar Pengguna untuk menemukan yang asli. Kemudian masuk sebagai yang asli dan hapus superuser baru.
shacker
173
  1. python manage.py createsuperuser akan membuat superuser lain, Anda dapat masuk ke admin dan mengingat kembali nama pengguna Anda.
  2. Ya mengapa tidak.

Untuk memberikan hak pengguna normal, buka shell dengan python manage.py shelldan coba:

from django.contrib.auth.models import User
user = User.objects.get(username='normaluser')
user.is_superuser = True
user.save()
DrTyrsa
sumber
Jika memungkinkan, bagaimana cara melakukannya?
IamH1kc
Dengan pendekatan ini, tampaknya pengguna tidak dapat mengakses admin django
keul
3
@LucaFabbri Anda juga perlu mengaturuser.is_staff = True
Aaron McMillin
122

Anda dapat mencoba melalui konsol:

python manage.py shell

kemudian gunakan skrip berikut di shell

from django.contrib.auth.models import User
User.objects.filter(is_superuser=True)

akan mencantumkan Anda semua pengguna super di sistem. jika Anda mengenali nama pengguna Anda dari daftar:

usr = User.objects.get(username='your username')
usr.set_password('raw password')
usr.save()

dan Anda menetapkan kata sandi baru (:

FallenAngel
sumber
12
User.objects.filter(is_superuser=True)
DrTyrsa
pip install django-extensions, tambahkan installed appsdan jalankan ./manage.py shell_plus. The Userkelas akan tersedia dan Anda bisa password-change.
Timo
Metode ini memungkinkan pengguna untuk mengatur kata sandi apa pun, tanpa validasi apa pun. Dengan demikian Anda dapat menetapkan kata sandi yang sangat sederhana (hanya untuk tujuan pengujian), yang tidak diizinkan metode jawaban yang diterima.
Gautam J
23

Anda dapat membuat superuser baru dengan createsuperuserperintah.

Aldarund
sumber
14

Ini pertanyaan yang sangat bagus.

python manage.py changepassword user_name

Contoh: -

python manage.py changepassword mickey
anand24
sumber
11

setup baru harus terlebih dahulu dijalankan python manage.py createsuperuser untuk membuat pengguna. Sepertinya tidak ada kata sandi nama pengguna default untuk masuk ke admin.

Kiran P.
sumber
9

Salah satu cara terbaik untuk mengambil nama pengguna dan kata sandi adalah melihat dan memperbaruinya. Model Pengguna menyediakan cara yang sempurna untuk melakukannya.

Dalam hal ini, saya menggunakan Django 1.9

  1. Arahkan ke direktori root Anda i, e. di mana Anda "mengelola.py" file terletak menggunakan konsol Anda atau aplikasi lain seperti Git.
  2. Ambil shell Python menggunakan perintah "python manage.py shell".
  3. Impor Model Pengguna dengan mengetik perintah berikut "dari django.contrib.auth.models import User"
  4. Dapatkan semua pengguna dengan mengetik perintah berikut "users = User.objects.all ()"
  5. Cetak daftar pengguna Untuk pengguna Python 2 gunakan perintah "cetak pengguna" Untuk pengguna Python 3 gunakan perintah "print (pengguna)" Pengguna pertama biasanya adalah admin.

  6. Pilih pengguna yang ingin Anda ganti kata sandi mis

    "user = users[0]"

  7. Atur kata sandi

    user.set_password('name_of_the_new_password_for_user_selected')

  8. Simpan kata sandi baru

    "user.save()"

Mulai server dan masuk menggunakan nama pengguna dan kata sandi yang diperbarui.

Stephen Mwangi Wanjohi
sumber
Kelebihan metode ini manage.py changepasswordadalah Anda tidak terbatas pada kata sandi apa yang dapat atau tidak dapat Anda gunakan - tidak lebih mirip dengan omong kosong nama pengguna. (Ini di lingkungan dev saya. Saya tidak menganjurkan kata sandi yang lebih lemah. Anda harus selalu menggunakan kata sandi yang kuat di prod.)
Shashwat Black
5

Anda mungkin juga salah menjawab pertanyaan pengaturan dan tidak memiliki anggota staf. Dalam hal ini pergilah ke postgres:

obvioustest=# \c [yourdatabasename]
obvioustest=# \x
obvioustest=# select * from auth_user;
-[ RECORD 1 ]+-------------
id           | 1
is_superuser | f
is_staff     | f
...

Untuk memperbaikinya, edit secara langsung:

update auth_user set is_staff='true' where id=1;
Bryce
sumber
5

Dua cara untuk melakukan ini:

The changepassword perintah manajemen :

(env) $ python manage.py changepassword <username>

Atau (yang diperluas pada beberapa jawaban, tetapi berfungsi untuk model Pengguna yang diperluas) menggunakan shell Django-admin sebagai berikut:

(env) $ python manage.py shell

Ini akan memunculkan prompt perintah shell sebagai berikut:

Python 3.7.2 (default, Mar 27 2019, 08:44:46) 
[GCC 6.3.0 20170516] on linux
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>>

Maka Anda ingin yang berikut ini:

>>> from django.contrib.auth import get_user_model
>>> User = get_user_model()
>>> user = User.objects.get(username='[email protected]')
>>> user.set_password('new password')
>>> user.save()
>>> exit()

NB Mengapa saya menjawab pertanyaan ini dengan jawaban ini?

Karena, sebagaimana disebutkan, User = get_user_model()akan bekerja untuk Usermodel kustom Anda sendiri . Menggunakan from django.contrib.auth.models import Userkemudian User.objects.get(username='username')dapat menimbulkan kesalahan berikut:

AttributeError: Manager isn't available; 'auth.User' has been swapped for 'users.User'
Micheal J. Roberts
sumber
4

Jika Anda lupa membuat admin, pertama-tama buat satu dengan createsuperuserperintah manage.pylalu ganti kata sandi.

rapid2share
sumber
4

Anda dapat mencoba ini:

1. Ubah kata sandi Superuser tanpa konsol

python manage.py changepassword <username>

2. Ubah kata sandi Superuser melalui konsol

masukkan deskripsi gambar di sini masukkan deskripsi gambar di sini

Tuan Singh
sumber
1
Menggunakan tangkapan layar alih-alih kode tertulis adalah praktik yang sangat buruk. Poeple tidak dapat menyalin-menempelkan kode Anda untuk menguji dan itu tidak tersedia untuk pencarian di tempat
FallenAngel
3

Jika Anda tidak tahu nama pengguna yang dibuat di sini. Anda bisa mendapatkan pengguna seperti yang dijelaskan oleh @FallenAngel di atas.

python manage.py shell 
from django.contrib.auth.models import User
usrs = User.objects.filter(is_superuser=True)
#identify the user
your_user = usrs.filter(username="yourusername")[0]
#youruser = usrs.get(username="yourusername")
#then set the password

Namun jika Anda membuat model pengguna independen Anda. Kasus sederhana adalah ketika Anda ingin menggunakan email sebagai nama pengguna alih-alih nama pengguna default. Dalam hal model pengguna Anda tinggal di suatu tempat seperti your_accounts_app.models maka solusi di atas tidak akan berfungsi. Dalam hal ini Anda bisa menggunakan metode get_user_model

from django.contrib.auth import get_user_model 
super_users = get_user_model().objects.filter(is_superuser=True)
#proceed to get identify your user
# and set their user password
buka kunci saya
sumber
3

jika Anda lupa admin Anda maka Anda perlu membuat pengguna baru dengan menggunakan

python manage.py createsuperuser <username>

dan untuk kata sandi ada perintah CLI changepassword untuk Django untuk mengubah kata sandi pengguna

python manage.py changepassword <username>

ATAU

django-admin changepassword <username>

ATAU Jalankan kode ini dalam Django env

from django.contrib.auth.models import User
u = User.objects.get(username='john')
u.set_password('new password')
u.save()
Saurabh Chandra Patel
sumber
2

Hal lain yang perlu diperhatikan adalah mengatur status pengguna Anda is_staffsebagai aktif. Setidaknya, itulah yang membuatnya bekerja untuk saya. Untuk lebih detail, saya membuat yang lain superuserseperti yang dijelaskan orang di atas. Lalu saya pergi ke tabel database auth_userdan mencari nama pengguna itu untuk memastikan is_staffflagnya disetel ke 1. Itu akhirnya memungkinkan saya untuk masuk ke adminsitus.

pengguna1330974
sumber
2

Buat superuser baru dengan perintah "python manage.py createuperuser". Masuk sebagai pengguna super baru. Klik tautan 'pengguna'. Kemudian klik pada pengguna yang ingin Anda hapus. klik hapus pengguna di akhir halaman formulir.

Catatan - Proses di atas akan membuat perubahan pada log aktivitas yang dilakukan oleh pengguna tertentu.

Ishan Dixit
sumber
1

python manage.py nama pengguna changepassword

Aturan Basant
sumber
1

menggunakan

python manage.py dumpdata

kemudian lihat pada akhirnya Anda akan menemukan nama pengguna

Donald Bebek
sumber
0

Cara terbaik adalah pergi saja ke terminal dan ketik

python manage.py createsuperuser

dan masukkan kata sandi dan nama pengguna lain lagi tetapi Anda akan kehilangan sebagian dari profil yang Anda buat sebelumnya dalam banyak kasus.

CAP.tech
sumber
0

Saya pikir, Cara yang lebih baik Di baris perintah

python manage.py createuperuser

nevriye gül
sumber
0

Cukup mudah ketikkan perintah ini di commandline Anda

python manage.py changepassword yourusername

Shrey
sumber
-1

Cara lain untuk mendapatkan nama pengguna (dan sebagian besar informasi) adalah mengakses database secara langsung dan membaca info dari tabel.

Mati
sumber