Rails 콘솔에서 비밀번호 재설정 고안


92

앱을 실행하는 동안 이메일 주소로 사용자를 선택한 다음 rails consoleDevise 에서 수동으로 비밀번호를 설정하는 방법은 무엇입니까?

또한 Devise를 사용하는 동안 계정 조작과 관련된 자세한 내용을 다루기 위해 문서를 검토하려면 어디로 가야합니까?


Valk : where ()는 rails 3까지는 사용할 수 없습니다.하지만 당신이 한 방식도 괜찮습니다.
hellion 2012-08-25

답변:


139

당신이 설명한대로 다소 :-)

# 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 ...로 설정하면 작동하지 않았습니다.
일루미 네이트

음, 모르겠습니다. AdminUser 모델을 쿼리 하시겠습니까? 저는 항상 모든 사용자를 '역할'속성이 할당 된 동일한 테이블에 저장했습니다.
Sergio Tulentsev 2011

: store_in 메소드로 모델이 참조하는 컬렉션의 이름을 변경할 수 있습니다. 따라서 admin_users 테이블을 보려면 해당 코드 앞에 User.store_in 'admin_users'를 추가해야합니다. (이 답변이 Mongoid의 사용을 의미한다)
세르지오 Tulentsev

시도 User.store_in 'admin_users'했지만 받았습니다 undefined method. 매번 0으로 돌아 가기 때문에 테이블에 액세스 할 수없는 것 같습니다. 전체 테이블을 쿼리하고 처음에 해당 테이블에 들어가는 지 확인하기 위해 처음에 모든 항목을 가져 오는 것은 어떻습니까? (여기서 MySQL에서 작업하지만 ActiveRecord에서는 중요하지 않습니다.)
ylluminate

: store_in은 Mongoid gem의 일부입니다. 당신은 User.db를 호출하여 낮은 (ER) - 레벨 루비 드라이버에 액세스 할 수 있습니다
세르지오 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')
copremesis

27

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 2011

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)를 사용했습니다.
dennis

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

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

0

너무 많은 로그인 시도로 인해 계정이 잠긴 경우 다음을 수행해야 할 수도 있습니다.

user.locked_at = ''
user.failed_attempts = '0'
user.save!
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.