【问题标题】:Wordpress REST API - send reset password linkWordpress REST API - 发送重置密码链接
【发布时间】:2019-02-01 18:44:27
【问题描述】:

我想从我的应用程序创建一个请求。 (iOS 和 Android - 使用 Xamarin 编码)。

说明:

该请求应触发 WordPress action=lostpassword。 - 用户收到一封电子邮件以在浏览器中重置他的密码。

或

用户将能够设置新密码。 WordPress 发送一个电子邮件链接 - 用户必须在其中验证他是否更改了密码。 是否有机会通过对 REST API 的请求来执行此操作。

也许有类似的想法?

我已经试过了:

  1. 文档中提供了功能但对我不起作用的插件
  2. 手动调用wp-login.php?action=lostpassword with body

{ "redirect_to": "", "user_login": "name@provider.de", "wp-submit": "Neues+Passwort" }

【问题讨论】:

    标签: xamarin wordpress-rest-api


    【解决方案1】:

    创建您的自定义 API

    网址

    https://yourdomain/api/forgot_password.php

    参数

    登录:manoj.infoways@gmail.com

    在根目录下创建文件夹api并创建文件forgot_password.php

    forgot_password.php

    <?php include '../wp-load.php';
    
    $login = $_REQUEST['login']; 
    
    if ( empty( $login ) ) {
        $json = array( 'code' => '0', 'msg' => 'Please enter login user detail' );
        echo json_encode( $json );
        exit;     
    }
    
    $userdata = get_user_by( 'email', $login); 
    
    if ( empty( $userdata ) ) {
        $userdata = get_user_by( 'login', $login );
    }
    
    if ( empty( $userdata ) ) {
        $json = array( 'code' => '101', 'msg' => 'User not found' );
        echo json_encode( $json );
        exit;
    }
    
    $user      = new WP_User( intval( $userdata->ID ) ); 
    $reset_key = get_password_reset_key( $user ); 
    $wc_emails = WC()->mailer()->get_emails(); 
    $wc_emails['WC_Email_Customer_Reset_Password']->trigger( $user->user_login, $reset_key );
    
    
    $json = array( 'code' => '200', 'msg' => 'Password reset link has been sent to your registered email' );
    echo json_encode( $json );
    exit;
    
    ?>
    

    login 是参数名,请记住。

    它对我来说 100% 有效,试试吧

    【讨论】:

    • $wc_emails 函数是针对 woocommerce 的,那么 WordPress 中是否有类似的函数?
    【解决方案2】:

    我认为this 应该可以帮到你。

    示例显示为 wp_lostpassword_url() 函数返回丢失的密码 URL http://example.com/lostpassword/:

    add_filter( 'lostpassword_url', 'my_lost_password_page', 10, 2 );
    function my_lost_password_page( $lostpassword_url, $redirect ) {
        return home_url( '/lostpassword/?redirect_to=' . $redirect );
    }
    

    【讨论】:

    • 哦,不知道我可以这样称呼它。谢谢!我尝试并为我工作! :-)
    【解决方案3】:

    您可以在 function.php 或任何其他地方(如自定义插件)中使用此代码创建自定义端点

    function custom_user_forget_password($request)
    {
        $email = $request->get_param('email');
    
        $userdata = get_user_by('email', $email);
    
        if (empty($userdata)) {
            $userdata = get_user_by('login', $email);
        }
    
        if (empty($userdata)) {
            return __('User not found');
        }
    
        $user = new WP_User(intval($userdata->ID));
        $reset_key = get_password_reset_key($user);
        $wc_emails = WC()->mailer()->get_emails();
        $wc_emails['WC_Email_Customer_Reset_Password']->trigger($user->user_login, $reset_key);
    
        return __('Password reset link has been sent to your registered email.');
    
    }
    add_action('rest_api_init', function () {
        register_rest_route('custom/v1/', '/forget_password', array(
            'methods' => 'POST',
            'callback' => 'custom_user_forget_password',
        ));
    });
    

    然后你可以在任何你想要的地方调用这个端点(URL /wp-json/custom/v1/forget_password)的发布请求,如果用户存在,它将发送一个密码重置链接。

    【讨论】:

      猜你喜欢
      • 2017-10-17
      • 1970-01-01
      • 1970-01-01
      • 2015-11-13
      • 2023-03-26
      • 2015-07-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多