Railsコンソールからパスワードをリセットする


92

アプリの実行中に、メールアドレスでユーザーを選択し、rails consoleDevise 内で手動でパスワードを設定するにはどうすればよいですか?

また、Deviseを使用する際のアカウントの操作に関するこの詳細については、ドキュメントをどこで確認すればよいですか?


Valk:where()はrails 3まで利用できません。しかし、それを行う方法も問題ありません。
hellion 2012

回答:


138

あなたが説明したようにそれは多かれ少なかれです:-)

# 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 ...に設定するだけでは機能しませんでした。
11:29にイルミネート

ええと、わかりません。AdminUserモデルをクエリしますか?私については、すべてのユーザーを常に「ロール」属性を割り当てて同じテーブルに保管しました。
Sergio Tulentsev

:store_inメソッドを使用して、モデルが参照するコレクションの名前を変更できます。したがって、admin_usersテーブルを調べるには、そのコードの前にUser.store_in 'admin_users'を追加する必要があります。(この答えはモンゴイドの使用を意味します)
セルジオトゥレンツェフ

User.store_in 'admin_users'しかし受け取っundefined methodた試み。毎回nilが返されるだけなので、テーブルにアクセスできないようです。テーブル全体をクエリし、その中のすべてのエントリを最初に取得して、最初にそのテーブルにアクセスしているかどうかをテストするのはどうですか?(ただし、ここではMySQLで作業していますが、ActiveRecordでは問題になりません。)
イルミネート

:store_inはMongoid gemの一部です。User.dbを呼び出すことで、低(er)レベルのルビードライバーにアクセスできます
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はレールで焼かれているため、pw確認の使用は冗長です。User.find_by_email('joe@example.com').update_attributes(:password => 'password')
コメプレシス2017

26

Railsコンソールで以下を実行すると、トリックが実行されます。

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

あなたは単にパスワードフィールドを更新することができます、確認パスワードは必要ありません、deviseはそれを暗号化された形式で保存します

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')

それをやった。


この理由はwhere(); メソッドはまだrails 2.3にはなかったので、昔はfind(:all、:conditions => conditions)を使用していました。
デニス2013年

3

1. ralisコンソールにログイン

$ 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.ログインページを更新し、新しいパスワードを使用してログインし、お楽しみください!

幸運を!


deviseは組み込まれているため、pw確認の使用は冗長です。User.find_by_email('joe@example.com').update_attributes(:password => 'password')
コメプレシス2017


0

あまりにも多くのログイン試行からアカウントがロックされている場合は、次の操作も必要になる場合があります。

user.locked_at = ''
user.failed_attempts = '0'
user.save!
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.