web-dev-qa-db-ja.com

Wp_signonを呼び出してもユーザーはログインしません

私は現在、私の会社のヘルプデスクシステムがWordpressに対して認証できるように、私のWordpressサイト用のシングルサインオンメカニズムをプログラミングしています。

これを実現するために、まだサインインしていない場合は、wp_signon()を使用してユーザーをサインインします。

<?php
define('WP_USE_THEMES', false);
require("wp-blog-header.php");

if(!is_user_logged_in() && $_POST["log"] == "") {
    //redirect to login form that submits to this PHP script
    exit(0);
}

if(!is_user_logged_in() && $_POST["log"] != "") {
    $creds = array('user_login' => $_POST["log"], 'user_password' => $_POST['pwd'], 'remember' => $_POST["rememberme"]);
    $user_info = wp_signon($creds, false);

    if(!is_a($user_info, 'WP_Error')) {
        $username = $_POST["log"];
        wp_set_current_user($user->ID, $username);
        wp_set_auth_cookie($user->ID, true, false); 
        do_action('wp_login', $username);
    } else {
        write_log(ERROR, "Error authenticating: " . $user_info->get_error_message($user_info->get_error_code()));
    }

$user_info = wp_get_current_user();

/* Code from here uses user attributes to generate and encrypt a single sign-on token */
?>

私が直面している問題は、wp_signon()wp_set_current_user()wp_set_auth_cookie()とloginアクションを呼び出した後でも、ユーザーはまだログインしていないということです。私は$ user_infoオブジェクトを取得しますが、Wordpressにはログインしません。彼らはサポートシステムから戻ってきた安全なリンクをたどり、ページにたどり着くことができず、再度ログインしなければなりません(したがってシングルサインオンの目的を破ります)。

さらに、wp_signon()セクション全体をauth_redirect()に置き換えてみたところ、ユーザーはサイトに正常にログインしましたが、URLにリダイレクトするクエリパラメータがある場合でも、プロフィールページにリダイレクトされます。私のスクリプトに。

2
Adrian

auth_redirect()が呼ばれる前にあなたのコードが実行されることを確認する必要があります。

簡単に言うと、setup_themeアクションを使用して関数全体をフックする必要があります。私の場合はうまくいきました。

2