2012-07-19 4 views
0
# in views/device/registration/new.html.erb: 
<% password = Devise.friendly_token.first(8) %> 

<%= form_for(resource, :as => resource_name, :url => registration_path(resource_name, :locale => I18n.locale)) do |f| %> 

<%= f.hidden_field :password, :value => password %> 
<%= f.hidden_field :password_confirmation, :value => password %> 

<%= f.email_field :email %> 

<%= f.submit "sign up" %> 
<% end %> 


# in views/device/mailer/confirmation_instructions.html.erb: 
<p>Your Password: <%# @ressource.password %></p> 

나는 새로운 사용자를위한 암호를 생성하고 있습니다. 사용자가 확인 이메일을 받으면 생성 된 비밀번호를 입력하는 올바른 위치 여야합니다. (확인 후 암호를 보낼 수 있음)이메일 확인에 암호를 알아 두는 것

이메일 @ resource.password는 nil입니다!

기기 확인 이메일에서 비밀번호를 보내는 방법은 무엇입니까? 대안은 암호화없이 db에 pwd를 저장할 수 있지만이 역시 성공하지 못했습니다.

+0

암호를 데이터베이스에 일반 텍스트로 저장하는 실수를 저 지르지 마십시오. 큰 군단을 위해 이것을 남겨주세요. 또한 사용자가 계정을 등록하거나 복구하려고 시도 할 때 암호를 사용자에게 보낼 필요가 없습니다. 'confirmable' Devise 모듈을 확인하십시오. https://github.com/plataformatec/devise/ –

+0

나는 당신의 의견을 존중하며, 따라하고 싶습니다만, 3 단계로 사용자에게 고민하고 싶지는 않습니다. 나는 확인을 사용하기로 나 자신에게 동의했다. 그러나 그것은 모두이어야한다. 비밀 번호를 생성하는 몇 가지 예제가 있습니다 ....하지만 어떻게 확인 후 사용자 로그인합니까? 유일한 가능성은 reset_password이지만, 사용자에게 초기에 암호 및 확인 입력을 줄 수 있으며 이것은 자동 생성하기위한 요구 사항입니다. 전자 메일에 gernerated 암호를 보낼 수있는 유일한 솔루션! 권리? – guefi

+0

그러면 가장 좋은 방법은 사용자가 초기에 비밀번호를 선택하도록하는 것입니다. 또한, 결국 어떤 방법을 선택 하든지, 일반 텍스트 암호는 db로 사용하지 마십시오. –

답변

5

이것은 당신이 언급 한 문제에 대한 약간 해킹되었지만 실행 가능한 해결책입니다.

# in views/device/mailer/confirmation_instructions.html.erb: 
<% pass = Devise.friendly_token.first(8) %> 
<p>Your password is <%= pass %></p> 
<% @resource.update_attributes({ :password => pass, :password_confirmation => pass }) %> 

이렇게하면 사용자의 비밀번호를 설정하고 바로 이메일을 보내 게됩니다. 및 password_confirmation 필드를 제거하면 user 만들기가 실패하므로 views/device/registration/new.html.erb의 코드는 변경되지 않은 상태로 유지할 수 있습니다.

+1

헤이 ... 그거 좋은 생각이야 .. 고마워. – guefi

0

Kulbir Saini가 제안한 솔루션에 몇 가지 문제점이 있습니다. 암호를 업데이트하면 토큰 변경이 필요하므로 콜백이 필요하므로 실패 할 수도 있습니다.

이 문제를 해결하기 위해 Kulbir 's를 사용하고 비밀번호를 수정하기 위해 일부 코드를 수정했지만 모든 콜백을 피했습니다.

아마도 가장 좋은 해결책은 아니지만 트릭을 수행합니다.

<% pass = @resource.confirmation_token.first(8) %> 
<p>Your password is: <%= pass %></p> 
<% @resource.update_column(:encrypted_password, ::BCrypt::Password.create("#{pass}")) %> 
관련 문제