현재 로그인 한 사용자가 로그 아웃하지 않고 다른 사용자를 프로그래밍 방식으로 가장


9

에러가 발생하면 현재 사용자가 로그 아웃되지 않도록 모듈이 global 값을 변경 $user하고 자체 코드를 실행하며 원래 값을 어떻게 복원해야 $user합니까?


이것에 대해 오래된 문제가 있습니다.이 문제는 여러 번 호출 될 때조차도 이것을 올바르게 처리 할 수있는 기능을 추가합니다. drupal.org/node/287292를 참조하십시오 . 패치를 검토하고 테스트하십시오.
Berdir

1
drupal.org에서 Drupal 6, Drupal 7 및 Drupal 8의 다른 사용자를 가장하는 솔루션이있는 Community Documentation create가 있습니다 : 다른 사용자를 안전하게 가장하기 .
iStryker

답변:


18

drupal_cron_run () 함수는 크론이 실행 될 때마다 익명으로 현재 사용자를 변경 이후 다음, 정확히 이것에 대한 좋은 예를 제공이 완료된 후 다시 전환됩니다.

// Prevent session information from being saved while doing funky stuff.
$original_session_state = drupal_save_session();
drupal_save_session(FALSE);

// Force the current user to anonymous to ensure consistent permissions on
// funky stuff runs.
$original_user = $GLOBALS['user'];
$GLOBALS['user'] = drupal_anonymous_user(); // Or use user_load() for a non-anonymous user.

// Do funky stuff here...

// Restore the user.
$GLOBALS['user'] = $original_user;
drupal_save_session($original_session_state);

가치는 (에서 멀리 어딘가에 현재 사용자 개체를 넣을 수 있습니다 지적 $GLOBALS과 스위치 또 다른 안전 유지를위한 변수 또는 단지) 어떤 과에서 그들을로드하여 사용자 user_load(). 특정 사용자가 특정 권한을 설정하여 특정 프로세스를 수행 할 때 가장 무도회와 같은 끔찍한 일을 할 수 있습니다. 원칙은 동일합니다.
Greg

이 코드에는 잠재적 인 1 문제 만 있습니다. 이전 세션을 변수 $ old_session에 저장해야합니다. 저장 세션을 false로 설정 한 다음 drupal_save_session ($ old_session) 끝에서 설정하십시오.
iStryker

drupal.org/project/phantomjs_capture 를 다른 사용자로 사용하여 화면 액세스 및 캡처 가능합니까? drdoal.org/node/2899252 문제를 해결 하십시오 .
kiranking
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.