วิธีรีเซ็ตรหัสผ่านผู้ดูแลระบบ Django


451

ฉันใช้ Django (เวอร์ชั่น 1.3) และลืมทั้งชื่อผู้ใช้และรหัสผ่านของผู้ดูแลระบบ จะรีเซ็ตทั้งสองอย่างไร

และเป็นไปได้หรือไม่ที่จะทำให้ผู้ใช้ปกติเป็นผู้ดูแลระบบและจากนั้นลบสถานะผู้ดูแลระบบ?

คำตอบ:


785
python manage.py changepassword <user_name>

ดูเอกสาร


7
เพิ่งรู้ว่าคุณบอกว่าคุณลืมชื่อผู้ใช้ ... 'ผู้ดูแลระบบ' การเป็นชื่อผู้ใช้ในคำตอบของฉันจะไม่ช่วยอะไรมากแล้ว!
JamesO

8
@ user794916 เป็นตัวเลือกที่ค่อนข้างแปลกถ้าคุณจำชื่อผู้ใช้ไม่ได้ :-)
DrTyrsa

1
คุณสามารถเปลี่ยนชื่อผู้ใช้จาก "ผู้ดูแลระบบ" เป็นชื่อผู้ใช้อื่นที่เหมาะสม : D
mxi1

4
django ดีที่สุด ทุกอย่างนั้นง่ายมาก
DMTintner

5
หากคุณลืมชื่อผู้ใช้คุณสามารถทำได้manage.py createsuperuserเพื่อสร้าง superuser ตัวที่สองจากนั้นดูรายการผู้ใช้เพื่อค้นหาต้นฉบับ จากนั้นเข้าสู่ระบบในฐานะที่เป็นต้นฉบับและลบ superuser ใหม่
shacker

173
  1. python manage.py createsuperuser จะสร้าง superuser อื่นคุณจะสามารถเข้าสู่ระบบของผู้ดูแลระบบและจดจำชื่อผู้ใช้ของคุณได้
  2. ใช่ทำไมล่ะ

เพื่อให้สิทธิ์ผู้ใช้ปกติเปิดเปลือกด้วยpython manage.py shellและลอง:

from django.contrib.auth.models import User
user = User.objects.get(username='normaluser')
user.is_superuser = True
user.save()

ถ้าเป็นไปได้ทำอย่างไร?
IamH1kc

ด้วยวิธีการนี้ดูเหมือนว่าผู้ใช้จะไม่สามารถเข้าถึงผู้ดูแลระบบ django
keul

3
@LucaFabbri คุณจะต้องตั้งuser.is_staff = True
Aaron McMillin

122

คุณอาจลองผ่านคอนโซล:

python manage.py shell

จากนั้นใช้สคริปต์ต่อไปนี้ในเชลล์

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

จะแสดงรายการผู้ใช้ขั้นสูงทั้งหมดในระบบ หากคุณรู้จักชื่อผู้ใช้ของคุณจากรายการ:

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

และคุณตั้งรหัสผ่านใหม่ (:


12
User.objects.filter(is_superuser=True)
DrTyrsa

pip install django-extensionsเพิ่มไปและเรียกใช้installed apps ระดับจะสามารถใช้ได้และคุณก็สามารถ ./manage.py shell_plusUserpassword-change
Timo

วิธีนี้อนุญาตให้ผู้ใช้ตั้งรหัสผ่านใด ๆ โดยไม่ต้องมีการตรวจสอบใด ๆ คุณสามารถตั้งรหัสผ่านที่ง่ายมาก (เพื่อจุดประสงค์ในการทดสอบ) ซึ่งวิธีการตอบรับที่ไม่อนุญาต
Gautam J


14

นี่เป็นคำถามที่ดีมาก

หลาม Manage.py changepassword user_name

ตัวอย่าง: -

python manage.py changepassword mickey

11

การตั้งค่าใหม่ควรเริ่มต้น python manage.py createsuperuserเพื่อสร้างผู้ใช้ ดูเหมือนว่าไม่มีรหัสผ่านชื่อผู้ใช้เริ่มต้นในการเข้าสู่ระบบผู้ดูแลระบบ


9

หนึ่งในวิธีที่ดีที่สุดในการเรียกชื่อผู้ใช้และรหัสผ่านคือการดูและอัปเดต รูปแบบผู้ใช้เป็นวิธีที่สมบูรณ์แบบในการทำเช่นนั้น

ในกรณีนี้ฉันใช้ Django 1.9

  1. นำทางไปยังไดเรกทอรีรากของคุณ i, e ที่ที่คุณอยู่ไฟล์ "Manage.py" โดยใช้คอนโซลหรือแอปพลิเคชันอื่น ๆ เช่น Git
  2. ดึงข้อมูล Python shell โดยใช้คำสั่ง "python Manage.py shell"
  3. อิมพอร์ต User Model โดยพิมพ์คำสั่งต่อไปนี้ "จาก django.contrib.auth.models import User"
  4. รับผู้ใช้ทั้งหมดโดยพิมพ์คำสั่งต่อไปนี้ "users = User.objects.all ()"
  5. พิมพ์รายชื่อผู้ใช้สำหรับผู้ใช้ Python 2 ใช้คำสั่ง "print users" สำหรับผู้ใช้ Python 3 ใช้คำสั่ง "print (users)" ผู้ใช้รายแรกมักเป็นผู้ดูแลระบบ

  6. เลือกผู้ใช้ที่คุณต้องการเปลี่ยนรหัสผ่านเช่น

    "user = users[0]"

  7. ตั้งรหัสผ่าน

    user.set_password('name_of_the_new_password_for_user_selected')

  8. บันทึกรหัสผ่านใหม่

    "user.save()"

เริ่มต้นเซิร์ฟเวอร์และเข้าสู่ระบบโดยใช้ชื่อผู้ใช้และรหัสผ่านที่อัปเดต


ข้อดีของวิธีนี้manage.py changepasswordคือคุณไม่ได้ถูก จำกัด ให้ใช้รหัสผ่านใดที่คุณสามารถใช้หรือไม่สามารถใช้งานได้ - ไม่เหมือนกับชื่อผู้ใช้อึมากเกินไป (นี่คือสภาพแวดล้อม dev ของฉันฉันไม่ได้สนับสนุนรหัสผ่านที่อ่อนแอคุณควรใช้รหัสผ่านที่รัดกุมในการผลิต)
Shashwat Black

5

คุณอาจตอบคำถามตั้งค่าผิดและไม่มีสมาชิกในทีม ในกรณีนี้ให้ไปที่ postgres:

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

หากต้องการแก้ไขให้แก้ไขโดยตรง:

update auth_user set is_staff='true' where id=1;

5

สองวิธีในการทำสิ่งนี้:

changepassword คำสั่งการจัดการ :

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

หรือ (ซึ่งขยายไปตามคำตอบเล็กน้อย แต่ใช้ได้กับรุ่นผู้ใช้แบบขยาย) โดยใช้เชลล์ django-adminดังต่อไปนี้:

(env) $ python manage.py shell

สิ่งนี้ควรแสดงพร้อมต์คำสั่งเชลล์ดังนี้:

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)
>>>

จากนั้นคุณต้องการต่อไปนี้:

>>> from django.contrib.auth import get_user_model
>>> User = get_user_model()
>>> user = User.objects.get(username='admin@hug.com')
>>> user.set_password('new password')
>>> user.save()
>>> exit()

NBเหตุใดฉันจึงตอบคำถามนี้พร้อมคำตอบนี้

เพราะดังที่กล่าวมาUser = get_user_model()จะทำงานให้กับUserโมเดลที่คุณกำหนดเอง ใช้from django.contrib.auth.models import Userแล้วUser.objects.get(username='username')อาจโยนข้อผิดพลาดต่อไปนี้:

AttributeError: Manager isn't available; 'auth.User' has been swapped for 'users.User'

4

หากคุณลืมสร้างผู้ใช้ผู้ดูแลระบบก่อนสร้างด้วยcreatesuperuserคำสั่งเปิดmanage.pyแล้วเปลี่ยนรหัสผ่าน


4

คุณสามารถลองสิ่งนี้:

1. เปลี่ยนรหัสผ่าน Superuser โดยไม่ใช้คอนโซล

python manage.py changepassword <username>

2. เปลี่ยนรหัสผ่าน Superuser ผ่านคอนโซล

ป้อนคำอธิบายรูปภาพที่นี่ ป้อนคำอธิบายรูปภาพที่นี่


1
การใช้ภาพหน้าจอแทนการเขียนโค้ดเป็นการฝึกฝนที่แย่มาก Poeple ไม่สามารถคัดลอก - วางรหัสของคุณเพื่อทดสอบและไม่พร้อมใช้งานสำหรับการค้นหาในไซต์
FallenAngel

3

ในกรณีที่คุณไม่รู้จักชื่อผู้ใช้ตามที่สร้างไว้ที่นี่ คุณสามารถรับผู้ใช้ตามที่อธิบายโดย @FallenAngel ด้านบน

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

อย่างไรก็ตามในกรณีที่คุณสร้างโมเดลผู้ใช้อิสระของคุณ กรณีง่ายคือเมื่อคุณต้องการใช้อีเมลเป็นชื่อผู้ใช้แทนชื่อผู้ใช้เริ่มต้น ในกรณีนี้โมเดลผู้ใช้ของคุณจะอยู่ที่ใดที่หนึ่งเช่น your_accounts_app.models จากนั้นโซลูชันด้านบนจะไม่ทำงาน ในกรณีนี้คุณสามารถใช้เมธอด 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

3

หากคุณลืมผู้ดูแลระบบของคุณคุณต้องสร้างผู้ใช้ใหม่โดยใช้

python manage.py createsuperuser <username>

และสำหรับรหัสผ่านมีคำสั่ง CLI changepassword สำหรับ django เพื่อเปลี่ยนรหัสผ่านผู้ใช้

python manage.py changepassword <username>

หรือ

django-admin changepassword <username>

หรือเรียกใช้รหัสนี้ใน Django env

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

2

สิ่งที่ควรสังเกตอีกอย่างคือการตั้งค่าสถานะผู้ใช้ของคุณis_staffเป็นใช้งานอยู่ อย่างน้อยนั่นคือสิ่งที่ทำให้ฉันได้ผล สำหรับรายละเอียดเพิ่มเติมฉันสร้างอีกหนึ่งsuperuserคนตามที่อธิบายไว้ข้างต้น จากนั้นผมก็ไปที่ตารางฐานข้อมูลauth_userและค้นหาชื่อผู้ใช้นั้นเพื่อให้แน่ใจว่ามันตั้งธงที่จะis_staff 1ในที่สุดนั่นทำให้ฉันสามารถเข้าสู่adminเว็บไซต์


2

สร้าง superuser ใหม่ด้วยคำสั่ง "python Manage.py generateuperuser" เข้าสู่ระบบในฐานะผู้ใช้ใหม่สุด คลิกที่ลิงค์ 'ผู้ใช้' จากนั้นคลิกที่ผู้ใช้ที่คุณต้องการลบ คลิกที่ลบผู้ใช้ที่ส่วนท้ายของหน้าแบบฟอร์ม

หมายเหตุ - กระบวนการข้างต้นจะทำการเปลี่ยนแปลงบันทึกกิจกรรมที่กระทำโดยผู้ใช้รายนั้น




0

วิธีที่ดีที่สุดคือไปที่เทอร์มินัลและประเภทของคุณ

python manage.py createsuperuser

และใส่รหัสผ่านและชื่อผู้ใช้อีกครั้ง แต่คุณจะสูญเสียโปรไฟล์บางส่วนที่คุณสร้างไว้ก่อนหน้านี้ในกรณีส่วนใหญ่



0

มันง่ายมากเพียงแค่พิมพ์คำสั่งนี้ใน yout commandline

หลาม Manage.py เปลี่ยนชื่อรหัสผ่านของคุณ


-1

อีกวิธีในการรับชื่อผู้ใช้ (และข้อมูลส่วนใหญ่) คือการเข้าถึงฐานข้อมูลโดยตรงและอ่านข้อมูลจากตาราง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.