web-dev-qa-db-ja.com

ユーザーログイン時のパスワード変更

「パスワード変更」ページがあります。

ワードプレスを使用しているユーザーlogin first timeがパスワードを生成したときにそのページをリダイレクトする方法はありますか?

ありがとう

4
Giri

多分これはあなたを助けますか?

https://stackoverflow.com/questions/4267285/redirect-user-after-first-login-in-wordpress

彼は同様の問題を抱えているようで、1年前にそれを解決しました。

彼があなたのアプローチと異なるのは登録後48時間目のリダイレクトです。多分これで十分ですか?

そうでない場合 - 私はそれをあなたのやり方でやろうと思っています。

---編集

さて、私はちょうどあなたが望むものを正確にするものをプラグインにしました:

/*
 Plugin Name: Redirect Passwort
Plugin URI: TODO
Description: TODO
Author: xaeDes
Version: 0.1
Author URI: TODO
License: GPL2
*/

function redirect_passwort_profile_update($user_id, $old_user_data) {
    $user = new WP_User( $user_id );
    if( $user->data->user_pass != $old_user_data->user_pass) {
        //password has changed
        update_metadata("user",$user_id,"changed_password",true);
    }
}
add_action("profile_update", "redirect_passwort_profile_update", 10, 2);

function redirect_passwort_login_redirect($redirect_to, $url_redirect_to = '', $user = null) {

    if( isset($user->ID) ) {
        $changed_password = get_metadata("user", $user->ID, "changed_password",true);
        if( $changed_password != true ) {
            return get_bloginfo('url') . "/change-your-password-dude/";
        } else {
            return $redirect_to;
        }
    }
}
add_filter('login_redirect', 'redirect_passwort_login_redirect',10,3);

function redirect_passwort_password_reset( $user ) {
    //password has been reset to a random one. so the changed_password meta data should be reset as well
    if( isset($user->ID) ) {
        delete_metadata("user", $user->ID, "changed_password");
    }
}
add_action('password_reset', 'redirect_passwort_password_reset');

パスワットを変更したユーザーに、ユーザーのメタデータ "changed_pa​​ssword"を追加します。

ログイン時に、ユーザーのメタデータ "changed_pa​​ssword"が設定されているかどうかを確認し、設定されていない場合はリダイレクトします(したがって、ユーザーは一度でもパスワードを変更していない)。

ユーザーのパスワードがランダムなものにリセットされると、ユーザーのメタデータ "changed_pa​​ssword"もリセットされます。

3
xaedes

フック user_register および ユーザーメタデータを追加する 「まだログインしていません」フラグを格納します。 wp_login そしてそのメタデータをチェックし、もしあれば削除してリダイレクトし、そうでなければ通常のログイン動作をします。

2
Milo

ミロの答えに加えて:

    function after_user_register( $user_id ){

        // the new user just registered but never logged in yet
        add_user_meta($user_id, "has_not_logged_in_yet", "true", true);
    }

    add_action( 'user_register', 'after_user_register', 10, 1 );

    function after_user_loggedin(){

        if(is_user_logged_in()){

            $user_id=get_current_user_id();

            $user_meta=get_user_meta($user_id);

            if(isset($user_meta['has_not_logged_in_yet'])){

                delete_user_meta($user_id, "has_not_logged_in_yet");

                //do something else
            }
        }
    }

    add_action( 'init', 'after_user_loggedin');

編集(FYI)

フックwp_loginは、ユーザーメタ検索の観点からは、あまりうまく機能していません。ユーザがログインした状態でFALSEを返すことがあります。

0
RafaSashi