Rencanakan pengaturan ulang kata sandi dari konsol Rails


92

Saat menjalankan aplikasi, bagaimana Anda memilih pengguna dengan alamat email dan kemudian menyetel kata sandi secara manual di dalam rails consoleuntuk Rancangan?

Selain itu, ke mana saya akan membaca dokumentasi untuk membahas lebih detail terkait manipulasi akun saat menggunakan Devise?


Valk: where () tidak tersedia hingga rail 3. Tapi, cara Anda melakukannya juga baik-baik saja.
Hellion

Jawaban:


140

Ini kurang lebih seperti yang Anda gambarkan :-)

# 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

Perbarui dari 6 tahun kemudian :)

Rancangan modern memungkinkan sintaks yang lebih sederhana, tidak perlu menyetel bidang konfirmasi

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

Ah, hmm. Itu akan berfungsi untuk pengguna standar, tetapi dalam kasus ini dari tabel admin_users. Apa tweak yang tepat untuk dilakukan dari tabel ini vs pengguna? Cukup mengaturnya ke user = AdminUser ... tidak berhasil.
ylluminate

Umm, saya tidak tahu, kueri model AdminUser? Bagi saya, saya selalu menyimpan semua pengguna dalam tabel yang sama, dengan atribut 'peran' yang ditetapkan.
Sergio Tulentsev

Anda dapat mengubah nama koleksi yang dirujuk model dengan metode: store_in. Jadi, untuk melihat tabel admin_users Anda harus menambahkan User.store_in 'admin_users' sebelum kode itu. (jawaban ini menyiratkan penggunaan Mongoid)
Sergio Tulentsev

Mencoba User.store_in 'admin_users'namun diterima undefined method. Saya tampaknya tidak dapat mengakses tabel karena saya hanya mendapatkan nihil setiap kali. Bagaimana dengan menanyakan seluruh tabel dan hanya mendapatkan semua entri di dalamnya pada awalnya untuk diuji untuk melihat apakah saya masuk ke tabel itu pada awalnya? (Bekerja di MySQL di sini, namun itu tidak masalah dengan ActiveRecord.)
ylluminate

: store_in adalah bagian dari permata Mongoid. Anda bisa mendapatkan akses ke pengemudi ruby ​​tingkat rendah (er) dengan menelepon 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
merancang dipanggang di rel sehingga penggunaan konfirmasi pw berlebihan. User.find_by_email('joe@example.com').update_attributes(:password => 'password')
copremesis

27

Jika Anda menjalankan yang berikut ini di konsol rel, itu harus melakukan trik:

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

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


6
Perhatikan bahwa tanda seru tidak digunakan lagi, hanya saja:User.find_by(email: 'user_email_address').reset_password('new_password','new_password')
IrishDubGuy

1
Perhatikan juga bahwa Anda harus memasukkan kata sandi yang valid yang mengkonfirmasi persyaratan kata sandi dalam konfigurasi perangkat Anda.
zwippie

5

Anda cukup memperbarui bidang kata sandi, tidak perlu kata sandi konfirmasi, merancang akan menyimpannya dalam bentuk terenkripsi

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

3

Untuk beberapa alasan, (Rails 2.3 ??)

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

tidak berhasil untuk saya, tapi

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

melakukannya.


Alasan untuk ini adalah bahwa where (); Metode ini belum ada di rails 2.3, kami biasa menggunakan find (: all,: condition => conditioning) di masa lalu.
dennis

3

1. Login ke konsol ralis

$ sudo bundle exec rails console production

2. Kemudian perbarui kata sandi administrator

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. Segarkan halaman login, gunakan kata sandi baru untuk login, selamat menikmati!

Semoga berhasil!


devise dipanggang sehingga penggunaan konfirmasi pw berlebihan. User.find_by_email('joe@example.com').update_attributes(:password => 'password')
copremesis

2
User.find_by_email('joe@example.com').update_attributes(:password => 'password')

0

Jika akun Anda terkunci karena terlalu banyak upaya login, Anda mungkin juga perlu melakukan:

user.locked_at = ''
user.failed_attempts = '0'
user.save!
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.