이것은 가장 오래된 서드파티 플러그인 중 하나입니다(지금까지 9년 이상!) 그리고 항상 유지보수되며 정상적으로 작동해 왔습니다. 당신에게는 작동하지 않을 수 있지만, 이를 해결하는 방법은 대체 경로를 시도하는 것이 아니라 왜 당신에게 작동하지 않는지 이유를 찾는 것입니다.
제 Drupal 웹사이트가 사용자 비밀번호를 암호화된 코드로 저장하고 데이터베이스에 보관하고 있는지 궁금합니다. 저는 dsiscourse API를 사용하여 모든 사용자를 Discourse라는 플랫폼으로 이전했습니다. Drupal 데이터베이스에서 사용자 정보와 비밀번호 코드를 가져와 페이로드를 생성한 뒤 Discourse에 넣었습니다.
사용자들이 Drupal과 동일한 로그인 정보를 Discourse에서도 사용할 수 있을 것이라고 생각했지만, 작동하지 않습니다. Discourse는 "admin@123"과 같은 사용자의 실제 비밀번호를 받지 않습니다. 대신 "3sdfd32423@#423fdsfr"과 같은 사용자 비밀번호 해시 코드를 사용합니다.
Discourse는 Drupal에서 가져온 비밀번호 코드를 자체 데이터베이스의 자체 암호화 알고리즘에 맞게 변환하여 저장합니다.
그 이름의 사용자 필드를 생성하는 것과 그 이름의 사용자 정의 필드를 가진 것에는 차이가 있습니다. 따라서 해시가 잘못된 위치에 저장되고 있습니다.
문제는 후자(사용자 정의 필드)가 API를 통해 접근할 수 없다고 생각하는 것입니다.
가장 좋은 해결책은 사용자 필드의 내용을 실제 사용자 정의 필드로 이동시키는 일회성 커스텀 코드를 실행하는 것이라 생각합니다.
(플러그인을 수정하여 사용자 필드도 확인하도록 하는 것을 고려해 보았지만, 이러한 해시를 사용자 인터페이스에 노출하는 것은 보안 위험이라고 생각하므로 그렇게 하지 않겠습니다).
이것은 작동할 것입니다. Rails 콘솔에서 실행하세요 (수정을 확인하실 수 있도록 @Hitesh_Sharma 님을 태그합니다)
ufkey = "user_field_#{UserField.find_by(name: 'import_pass').id}"
User.all.each do |u|
if u.custom_fields.key?(ufkey)
u.custom_fields[:import_pass] = u.custom_fields[ufkey]
u.custom_fields.delete(ufkey)
u.save_custom_fields
end
end