2016-07-06 2 views
1

비밀번호없이 wordpress 사용자로 로그인하고 싶습니다. 이것이 내가 원하는거야. 사용자가 http://example-site.com/6789098765678.php을 방문하고 페이지에서 사용자 이름을 입력하면 비밀번호없이 자동으로 로그인됩니다.비밀번호없이 WordPress 사용자를 로그하는 방법

나는 wp_set_auth_cookie과 같은 것을 시도했지만, 어디에 넣어야할지 모르겠다. 나는 Ruby on Rails 배경에서 왔고 PHP에 대한 최소한의 지식을 가지고있다.

이 동작이 안전하지 않다는 것을 알고 있습니다. 특정 사용 사례입니다.

+0

기본적으로 wordpress는 사용자가 원하는 기능을 제공하지 않습니다. 이를 가능하게하는 가장 좋은 방법은 자신 만의 플러그인을 만들고 플러그인을 사용자 테이블에 연결 한 다음 사용자 이름이있는 사용자 정의 로그인 양식을 만들어야합니다. 사용자의 원래 비밀번호를 usermeta (소금물이 없거나 해쉬 된 비밀번호가 아님)에 저장 한 다음 사용자가 로그인 할 때 사용자 이름을 입력하십시오. 사용자 이름을 기반으로 usermeta에서 암호를 가져 와서 그 암호와 사용자 이름을 사용자에게 로그인하고 세션을 설정할 wordpress 로그인 기능에 제출하십시오. –

+0

@ArshSingh 그러면 어떻게 가능할까요? http://wordpress.stackexchange.com/questions/53503/can-i-programmatically-login-a-user-without-a-password –

+0

이것을 사용하려면이 http : //wordpress.stackexchange를 확인 했습니까? .com/a/128445/66430 –

답변

2

내가 코멘트 안에 게시 한 대답은 다음과 같은 방식으로 사용할 수 있습니다.

이 작업을 수행하는 데 필요한 사항은 다음과 같습니다. 사용자 이름으로 만 사용자 로그인에 사용할 wordpress 함수에 대해 ajax hooks을 만들고 jQuery ajax 함수를 호출하십시오.

첫 번째 단계는 다음과 같습니다. wp-content/themes/your_theme_name/ 그리고 functions.php 파일을 연 다음 파일 끝에 다음 코드를 추가하십시오.

function username_login(){ 
// Automatic login // 
$username = $_POST['username']; 
$user = get_user_by('login', $username); 



// Redirect URL // 
    if (!is_wp_error($user)) 
    { 
     wp_clear_auth_cookie(); 
     wp_set_current_user ($user->ID); 
     wp_set_auth_cookie ($user->ID); 

     $redirect_to = user_admin_url(); 
     echo json_encode(array('error_code'=>0)); 
     exit(); 
    } else { 
     echo json_encode(array('error_code'=>1)); 
     exit(); 
    } 
exit(); 
} 
add_action('wp_ajax_username_login','username_login'); 
add_action('wp_ajax_nopriv_username_login','username_login'); 

당신이 볼 수 있듯이, 우리는 아약스 컨트롤러에서 우리 username_login 기능에 훅하는 add_action 기능을 사용하고, 더 약 wordpress hooks here

우리가 여기에서 필요로하는 다음 단계가 아약스 통화를 할 읽기 우리가 생성하고 사용자 로그인을 한 다음 사용자가 로그인 할 때 사이트를 새로 고치는 기능. 다음 코드를 사용하여 사용자 로그인을 위해 Wordpress에 요청을 보냅니다. 우리가 지금 무엇을해야하는지, 당신이 자바 스크립트 코드 위의에서 볼 수 있듯이, 우리는 형태 선택이 username_login를 불렀다

jQuery('#username_login').on('submit',function(e){ 
    e.preventDefault(); 
    var data = $(this).serializeArray(); 
    data.push({ name:'action',value:'username_login' }); 
    $.ajax({ 
     url:"<?php echo admin_url('admin-ajax.php'); ?>";, 
     type: 'POST', 
     dataType: 'json', 
     data:data, 
     success:function(response){ 
      if(response.error_code == 1){ 
       alert('user cannot login') 
      } else { 
       alert('user logged in'); 
       location.reload(); 
      } 
     } 
    }); 
}); 

: wp-content/themes/your_theme_name/ 오픈 footer.php 안에 위치하여 footer.php 파일에 아래 코드를 추가합니다 문제는이 흐름 일 것입니다 방법, 이제 모두 포함되어 있는지

<form id="username_login"> 
    <input type="text" name="username" placeholder="Your username..." required/> 
    <button type="submit" name="submit">Login</button> 
</form> 

: 아이디 username_login로하고 우리가 버튼 타입 submit으로 username라는 입력을 만들 필요가 내부 양식 요소를 만드는 것입니다? . 사용자가 사용자 이름을 입력하고 로그인 할 때 ayax 요청은 yoursite.com/wp-admin/admin-ajax.php?action=username_login이라는 매개 변수와 함께 action으로 전송되며 사용자가 로그인 한 후 사용자가 로그인하면 사이트가 새로 고쳐집니다 일반 사용자의 기능에 아무런 문제없이 액세스 할 수 있습니다.

+0

제 질문에 답변 해 주셔서 감사합니다. 이것이 하나의 접근 방식이지만 쉬운 접근법은 코드를 여기에 붙여 넣는 것입니다. http://wordpress.stackexchange.com/questions/53503/can-i-programmatically-login-a-user-without-a-password/128445# 일부 PHP 파일에서 128445를 열고'require (dirname (__ FILE__). '/wp-load.php');'줄을 시작에 추가하십시오. 그것은 간단한 해결 방법입니다 : D –

+0

Upvoting 및 accepting이 작업을 수행하는 한 가지 방법입니다. 그러나 이전에 지정한 해결 방법을 사용했습니다. –

+1

당신의 해결 방법도 좋은데, 제가 게시 한 것이고, 당신이 뭔가 더 역동적이고 자바 스크립트를 기반으로 만들 필요가 incase입니다. 그렇게 할 수 있습니다. –

관련 문제