PHP의 자동 WordPress 관리자 로그인
오늘의 게시물은 WordPress 사이트에 깔끔한 작은 기능을 설치하는 방법을 보여주는 짧은 게시물일 뿐입니다. 안전하게 사용하면 매우 편리할 수 있습니다. 이는 사용자가 로그인할 수 있는 일반 계정을 제공하는 WordPress 사이트에서 사용하도록 설계되었습니다. 예를 들어, 많은 백엔드 WordPress 데모에서 작성자는 잠재 고객이 로그인하여 자신의 제품을 사용할 수 있는 '데모' 계정을 만듭니다. 대개 작성자는 다음과 같은 알림을 표시합니다.
사용자 이름: 데모
비밀번호: 데모
이것은 약간 보행자입니다. 확실히 데모를 좀 더 능률적이고 전문적으로 보이게 만들 수 있을까요? 이러한 자격 증명을 사용하여 WordPress 관리자에 자동으로 로그인하는 빠른 스니펫을 제공하겠습니다. 이는 테마의 기능 파일에 넣거나 자체 플러그인 파일에 넣어 활성화할 수 있습니다.
다음과 같은 경우에 유용할 수 있습니다.
- 귀하의 사이트에는 익명 사용자가 로그인할 수 있는 일반 계정이 있습니다.
- '원클릭' 로그인 링크를 원합니다.
- 빠르고 효율적인 데모 경로를 제공하고 필요한 단계를 최소화하여 제품 데모 전환을 극대화하려고 합니다.
- 방문자를 관련 위치(예: 설정 페이지)로 직접 안내하고 싶습니다.
중요: 실제 권한이 있는 계정에 로그인하는 데 이 기능을 사용하지 마십시오. 예. 관리자/편집자 계정 등
이 스니펫을 주의해서 사용하세요.
좋습니다. 다른 튜토리얼에서 했던 것처럼, 독서를 좋아하지 않는 분들도 곧바로 실험해 볼 수 있도록 주석이 달린 완전한 코드를 먼저 제공하겠습니다. 다음 스니펫은 독립형 플러그인 형태로 스타일이 지정되었습니다(개인 취향).
/*
Plugin Name: Auto Login
Plugin URI: http://hbt.io/
Version: 1.0.0
Author: Harri Bell-Thomas
Author URI: http://hbt.io/
*/
function autologin() {
// PARAMETER TO CHECK FOR
if ($_GET['autologin'] == 'demo') {
// ACCOUNT USERNAME TO LOGIN TO
$creds['user_login'] = 'demo';
// ACCOUNT PASSWORD TO USE
$creds['user_password'] = 'demo';
$creds['remember'] = true;
$autologin_user = wp_signon( $creds, false );
if ( !is_wp_error($autologin_user) )
header('Location: wp-admin'); // LOCATION TO REDIRECT TO
}
}
// ADD CODE JUST BEFORE HEADERS AND COOKIES ARE SENT
add_action( 'after_setup_theme', 'autologin' );
용법
이것은 사용이 매우 간단합니다. 계정 사용자 이름과 비밀번호는 플러그인 파일(위 코드)에 지정되어 있으며 로그인하려면 방문하기만 하면 됩니다. http://example.com/wp-login.php?autologin=demo
지정된 계정으로 로그인하면 즉시 wp-admin으로 리디렉션됩니다. 자격 증명이 잘못된 경우 로그인 양식이 정상적으로 표시됩니다.
사용자 정의
이 스니펫은 사용자 정의하기가 매우 쉽습니다. 기본적으로 편집해야 할 항목은 3개뿐이며 이러한 모든 변경 사항은 다음 코드 블록(전체 코드의 11~17행)에서 수행됩니다.
if ($_GET['login'] == 'dummy_account') {
// ACCOUNT USERNAME TO LOGIN TO
$creds['user_login'] = 'dummy';
// ACCOUNT PASSWORD TO USE
$creds['user_password'] = 'pa55word';
첫 번째 줄에는 URL 매개변수에 대한 조건부 확인이 표시됩니다. 위의 코드 블록은 다음을 확인합니다. wp-login.php?login=dummy_account
이 값은 원하는 대로 지정할 수 있지만 'loggedout', 'action' 및 'redirect_to'와 같은 원래 WordPress 매개변수를 사용하지 않도록 주의하세요. 4번째 줄은 로그인에 사용할 사용자 이름을 지정하는 곳입니다. 사용자 정의된 코드 조각은 '더미' 계정에 로그인을 시도합니다. 짐작할 수 있듯이 7행은 비밀번호를 지정하는 곳입니다. 위 비밀번호는 'pa55word' 입니다. 이 값을 입력하면 준비가 완료됩니다!
확장
현재 우리 스니펫은 하나의 계정에만 자동 로그인하도록 설정되어 있습니다. 계정마다 다른 로그인 링크를 원하면 어떻게 해야 합니까? 이 작업은 매우 빠르고 쉬우며 전체 내용을 반복해서 반복할 필요가 없습니다. 내 솔루션을 아래에서 살펴보십시오.
/*
Plugin Name: Auto Login
Plugin URI: http://hbt.io/
Description: Create convenient auto-login links to quickly login to generic accounts. Configure source code to make changes.
Version: 1.0.0
Author: Harri Bell-Thomas
Author URI: http://hbt.io/
*/
// Declare global var's
global $login_parameter, $accounts;
// THE PARAMETER TO CHECK FOR
// eg. http://exmaple.com/wp-login.php?param_name=account
$login_parameter = "autologin";
// ACCOUNT CODE BLOCK
$accounts[] = array(
"user" => "demo",
"pass" => "demo",
"location" => "wp-admin",
);
// END ACCOUNT CODE BLOCK
// EDIT AND REPEAT CODE BLOCK FOR AS MANY ACCOUNTS AS NEEDED
// Another example iteration
$accounts[] = array(
"user" => "tcwp",
"pass" => "demo",
"location" => "wp-admin/?tcwp-sent-me",
);
// SEE PREVIOUS EXAMPLE FOR DETAILS ABOUT THIS FUNCTION
function autologin() {
global $login_parameter, $accounts;
foreach ($accounts as $account) {
if ($_GET[$login_parameter] == $account['user']) {
$creds['user_login'] = $account['user'];
$creds['user_password'] = $account['pass'];
$creds['remember'] = true;
$autologin_user = wp_signon( $creds, false );
if ( !is_wp_error($autologin_user) )
header('Location: ' . $account['location']);
}
}
}
add_action( 'after_setup_theme', 'autologin' );핵심은 본질적으로 동일하지만 건방진 foreach 루프와 계정 배열도 포함되어 있습니다. autologin() 함수의 구조는 해당 코드가 각 계정에 대해 반복된다는 사실(foreach 루프 사용)을 제외하면 동일합니다. 이제 모든 관련 세부 정보가 전역 배열에 저장됩니다. 위의 예는 2개의 계정에 대해 설정되었지만 우리의 스니펫은 필요한 만큼의 계정을 수용할 수 있습니다. 추가 계정을 추가하려면 다음 코드 블록을 필요한 만큼 사용자 정의하고 추가하기만 하면 됩니다.
// ACCOUNT CODE BLOCK
$accounts[] = array(
"user" => "anotheraccount",
"pass" => "public_password",
"location" => "http://YouCanPutURLsHereToo.com/",
);
// END ACCOUNT CODE BLOCK
또한 매개변수 이름도 전역 변수로 옮겼다는 것을 알 수 있을 것입니다. 이것은 꼭 필요한 것은 아니지만 단순히 autologin() 함수에서 하드 코딩된 모든 값을 제거하기 위해 그렇게 했습니다.
결론
이 코드 조각은 제품 데모 사이트와 같이 간단한 사용을 위해 설계된 간단한 기능일 뿐이지만 훨씬 더 복잡한 로그인 시나리오에 사용될 가능성이 있습니다. 코드의 나머지 부분은 설명이 필요합니다. 하지만 제가 무엇을 했는지, 왜 그런 일을 했는지에 대해 질문이 있으시면 아래에 댓글을 남기시거나 저에게 트윗해주세요. 피드백/제안/아이디어가 있으면 아래 댓글 섹션에 댓글을 남겨주세요!

