wp_set_auth_cookie()仅对某些用户不起作用

时间:2017-02-01 05:02:27

标签: php wordpress rest api

我有一个登录表单并使用REST api服务登录Wordpress。我可以使用表单登录wordpress。但对于一些用户wp_set_auth_cookie()函数不工作,我得到502坏网关。任何人都可以帮我解决这个问题吗?

这是我的登录端点功能

function user_authentication() {

    global $wp_rest_auth_cookie;    
    if(strcasecmp($_SERVER['REQUEST_METHOD'], 'POST') != 0){
        throw new Exception('Request method must be POST!');
    } 
    $contentType = isset($_SERVER["CONTENT_TYPE"]) ? trim($_SERVER["CONTENT_TYPE"]) : '';
    if(strcasecmp($contentType, 'application/json') != 0){
        throw new Exception('Content type must be: application/json');
    } 
    $content = trim(file_get_contents("php://input"));   
    $decoded = json_decode($content, true);  
    if(!is_array($decoded)){
        throw new Exception('Received content contained invalid JSON!');
    }   
    $user_data['user_login'] = $decoded['username'];
    $user_data['user_password'] = $decoded['password'];
    $user_data['remember'] = false;
    $user = wp_signon( $user_data, false );
    if ( !is_wp_error( $user ) ) {      
        wp_clear_auth_cookie();
        wp_set_current_user ( $user->ID);
        wp_set_auth_cookie  ( $user->ID );
        $wp_rest_auth_cookie =  wp_create_nonce('wp-rest') ;
        $token = encrypt_decrypt('encrypt',$user->ID);  
        $name = get_name($user->ID);

        $response = array(
                    'status'=> 'success',                               
                    'token' => $token,
                    'username' => $name,
                    'uname' => $user->ID                

                    );

        return json_encode( $response);
    }else{
        $response = array(
                    'status' => 'fail',                         
                    'message'=> "The username and password you entered don't match." 
                    );
       return  json_encode($response);
    }


        die();
}

2 个答案:

答案 0 :(得分:0)

将以下代码添加到您的代码中,并检查wp_set_auth_cookie是否正常工作。

$user_data['user_login'] = $decoded['username'];
$user_data['user_password'] = $decoded['password'];
$user_data['remember'] = true;
$user = wp_signon( $user_data, false );
if ( !is_wp_error( $user ) ) { 
   wp_set_auth_cookie( $user->ID, true );       
} else {
   echo $user->get_error_message();
}

答案 1 :(得分:0)

我自己解决了这个问题。有一些未定义的变量错误以及api响应。这些错误与wp_set_auth_cookie()函数冲突。当我从代码中修复这些错误时,502错误的门路问题得到了解决。