Rails konsolundan şifre sıfırlama tasarlayın


92

Bir uygulamayı çalıştırırken bir kullanıcıyı e-posta adresine göre nasıl seçer ve ardından rails consoleDevise için parolayı manuel olarak belirlersiniz ?

Ayrıca, Devise'ı kullanırken hesapların manipüle edilmesine ilişkin bu konuda daha fazla ayrıntıyı ele almak için belgeleri incelemeye nereye gidebilirim?


Valk: burada (), raylar 3'e kadar mevcut değil. Ama bunu yapma şeklin de iyi.
hellion

Yanıtlar:


140

Az ya da çok tarif ettiğiniz gibi :-)

# 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 yıl sonraki güncelleme :)

Modern tasarım, daha basit sözdizimi sağlar, onay alanını ayarlamaya gerek yoktur

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

Ah, hmm. Bu standart bir kullanıcı için işe yarar, ancak bu durumda admin_users tablosundandır. Kullanıcılar karşısında bu tablodan çıkarılacak uygun ayar nedir? Basitçe user = AdminUser ... olarak ayarlamak işe yaramadı.
ylluminate

Umm, bilmiyorum, AdminUser modelini sorguluyor musunuz? Bana gelince, tüm kullanıcıları 'roller' özniteliği atanmış olarak her zaman aynı tablolarda sakladım.
Sergio Tulentsev

Modelin başvurduğu koleksiyonun adını: store_in yöntemi ile değiştirebilirsiniz. Dolayısıyla, admin_users tablosuna bakmak için, bu kodun önüne User.store_in 'admin_users' eklemeniz gerekir. (bu cevap Mongoid kullanımını ima eder)
Sergio Tulentsev

User.store_in 'admin_users'Ancak teşebbüs edildi undefined method. Görünüşe göre masaya erişemiyorum, çünkü her seferinde bir sıfır alıyorum. Başlangıçta o tabloya girip girmediğimi görmek için tüm tabloyu sorgulamaya ve başlangıçta tüm girişleri test etmeye ne dersiniz? (Burada
MySQL'de

: store_in, Mongoid cevherinin bir parçasıdır. User.db'yi arayarak düşük (daha) seviye ruby ​​sürücüsüne erişebilirsiniz
Sergio Tulentsev

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

1
devise raylarda pişirildiğinden pw onayının kullanımı gereksizdir. User.find_by_email('joe@example.com').update_attributes(:password => 'password')
kopremesis

27

Aşağıdakileri raylar konsolunda çalıştırırsanız, hile yapmalıdır:

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

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


6
Ünlem işaretinin kullanımdan kaldırıldığını unutmayın, sadece:User.find_by(email: 'user_email_address').reset_password('new_password','new_password')
IrishDubGuy

1
Ayrıca, yapılandırmanızdaki parola gereksinimlerini onaylayan geçerli bir parola girmeniz gerektiğini unutmayın .
zwippie

5

Şifre alanını basitçe güncelleyebilirsiniz, onay şifresine gerek yoktur, şifreyi şifrelenmiş biçimde kaydeder

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

3

Bazı nedenlerden dolayı, (Rails 2.3 ??)

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

benim için çalışmadı ama

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

yaptı.


Bunun olmasının sebebi ise where (); yöntem henüz rails 2.3'te değildi, eskiden find (: all,: condition => koşullar) kullanıyorduk.
dennis

3

1. ralis konsoluna giriş yapın

$ sudo bundle exec rails console production

2. Ardından yöneticinin şifresini güncelleyin

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. Giriş sayfasını yenileyin, giriş yapmak için yeni şifreyi kullanın, keyfini çıkarın!

İyi şanslar!


devise, pw onayının kullanımı gereksiz olacak şekilde pişirilir. User.find_by_email('joe@example.com').update_attributes(:password => 'password')
kopremesis

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

0

Hesabınız çok fazla giriş denemesine karşı kilitlenmişse, şunları da yapmanız gerekebilir:

user.locked_at = ''
user.failed_attempts = '0'
user.save!
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.