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?

ylluminate
sumber
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: '[email protected]').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)
Sergio Tulentsev
sumber
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 => '[email protected]').first
u.password='userpassword'
u.password_confirmation='userpassword'
u.save!
Eric Guo
sumber
1
merancang dipanggang di rel sehingga penggunaan konfirmasi pw berlebihan. User.find_by_email('[email protected]').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

gstraehle.dll
sumber
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('[email protected]')
u.update_attribute(:password, '123123')
Kshitij
sumber
3

Untuk beberapa alasan, (Rails 2.3 ??)

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

tidak berhasil untuk saya, tapi

user = User.find_by_email('[email protected]')

melakukannya.

valk
sumber
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!

robinwen
sumber
devise dipanggang sehingga penggunaan konfirmasi pw berlebihan. User.find_by_email('[email protected]').update_attributes(:password => 'password')
copremesis
0

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

user.locked_at = ''
user.failed_attempts = '0'
user.save!
Enzio
sumber