ตั้งรหัสผ่านใหม่จากคอนโซล Rails


92

ในขณะที่ใช้งานแอพคุณจะเลือกผู้ใช้ตามที่อยู่อีเมลแล้วตั้งรหัสผ่านด้วยตนเองภายในrails consoleสำหรับ Devise ได้อย่างไร?

นอกจากนี้ฉันจะไปตรวจสอบเอกสารเพื่อให้ครอบคลุมรายละเอียดเพิ่มเติมเกี่ยวกับการจัดการบัญชีขณะใช้ Devise ได้ที่ไหน


Valk: โดยที่ () ไม่สามารถใช้ได้จนกว่าจะถึงราง 3 แต่วิธีที่คุณทำก็ใช้ได้เช่นกัน
hellion

คำตอบ:


140

มันมากหรือน้อยตามที่คุณอธิบายไว้ :-)

# use mongoid
class User
  include Mongoid::Document
end


# then
user = User.where(email: 'joe@example.com').first

if user
  user.password = new_password
  user.password_confirmation = new_password
  user.save
end

อัปเดตจาก 6 ปีต่อมา :)

อุปกรณ์สมัยใหม่ช่วยให้ไวยากรณ์ง่ายขึ้นโดยไม่จำเป็นต้องตั้งค่าฟิลด์ยืนยัน

user.password = new_password; user.save
# or
user.update_attributes(password: new_password)

อ่าอืม วิธีนี้ใช้ได้กับผู้ใช้มาตรฐาน แต่ในกรณีนี้มาจากตาราง admin_users การปรับแต่งที่เหมาะสมที่จะดึงจากตารางนี้เทียบกับผู้ใช้คืออะไร? เพียงแค่ตั้งค่าเป็น user = AdminUser ... ก็ไม่ได้ผล
ylluminate

อืมไม่ทราบสอบถามรุ่น AdminUser? สำหรับฉันฉันมักจะเก็บผู้ใช้ทั้งหมดไว้ในตารางเดียวกันโดยมีการกำหนดแอตทริบิวต์ "บทบาท"
Sergio Tulentsev

คุณสามารถเปลี่ยนชื่อคอลเลกชันที่โมเดลอ้างถึงด้วยเมธอด store_in ดังนั้นหากต้องการดูในตาราง admin_users คุณจะต้องเพิ่ม User.store_in 'admin_users' ก่อนโค้ดนั้น (คำตอบนี้หมายถึงการใช้ Mongoid)
Sergio Tulentsev

ความพยายามที่ได้รับอย่างไรUser.store_in 'admin_users' undefined methodดูเหมือนว่าฉันจะไม่สามารถเข้าถึงโต๊ะได้เพราะฉันเพิ่งได้รับคืนมา สิ่งที่เกี่ยวกับการสืบค้นตารางทั้งหมดและรับรายการทั้งหมดในนั้นในตอนแรกเพื่อทดสอบดูว่าฉันเข้าสู่ตารางนั้นในตอนแรกหรือไม่ (ทำงานใน MySQL ที่นี่ แต่ก็ไม่สำคัญกับ ActiveRecord)
ylluminate

: store_in เป็นส่วนหนึ่งของอัญมณี Mongoid คุณสามารถเข้าถึงไดรเวอร์ทับทิมระดับต่ำ (er) ได้โดยโทรไปที่ User.db
Sergio Tulentsev

55
# $ rails console production
u=User.where(:email => 'usermail@gmail.com').first
u.password='userpassword'
u.password_confirmation='userpassword'
u.save!

1
อุปกรณ์ถูกอบในรางดังนั้นการใช้การยืนยัน pw จึงซ้ำซ้อน User.find_by_email('joe@example.com').update_attributes(:password => 'password')
copremesis

27

หากคุณเรียกใช้สิ่งต่อไปนี้ในคอนโซลรางควรทำตามเคล็ดลับ:

User.find_by(email: 'user_email_address').reset_password!('new_password','new_password')

http://www.rubydoc.info/github/plataformatec/devise/Devise/Models/Recoverable


6
โปรดทราบว่าเครื่องหมายอัศเจรีย์เลิกใช้แล้วเป็นเพียง:User.find_by(email: 'user_email_address').reset_password('new_password','new_password')
IrishDubGuy

1
โปรดทราบว่าคุณต้องป้อนรหัสผ่านที่ถูกต้องซึ่งยืนยันกับข้อกำหนดรหัสผ่านในการกำหนดค่าอุปกรณ์ของคุณ
zwippie

5

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

u = User.find_by_email('user@example.com')
u.update_attribute(:password, '123123')

3

ด้วยเหตุผลบางประการ (Rails 2.3 ??)

user = User.where(:email => email).first

ไม่ได้ผลสำหรับฉัน แต่

user = User.find_by_email('user@example.com')

ทำมัน


เหตุผลก็คือว่าที่ไหน (); วิธีนี้ยังไม่ได้อยู่ในราง 2.3 เราเคยใช้การค้นหา (: all,: condition => condition) ย้อนกลับไปในสมัยนั้น
dennis

3

1. เข้าสู่ระบบ ralis console

$ sudo bundle exec rails console production

2. จากนั้นอัปเดตรหัสผ่านของผู้ดูแลระบบ

irb(main):001:0> user = User.where("username = 'root'")
irb(main):002:0> u = user.first
irb(main):003:0> u.password="root2014@Robin"
=> "root2014@Robin"
irb(main):004:0> u.password_confirmation="root2014@Robin"
=> "root2014@Robin"
irb(main):005:0> u.save
=> true
irb(main):006:0> exit

3. รีเฟรชหน้าเข้าสู่ระบบใช้รหัสผ่านใหม่เพื่อเข้าสู่ระบบสนุก!

โชคดี!


อุปกรณ์ถูกอบดังนั้นการใช้การยืนยัน pw จึงซ้ำซ้อน User.find_by_email('joe@example.com').update_attributes(:password => 'password')
copremesis


0

หากบัญชีของคุณถูกล็อกจากการพยายามเข้าสู่ระบบมากเกินไปคุณอาจต้องทำดังนี้

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