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.