WordPress как на ладони

Быстрая авторизация

Решил организовать на сайте быстрый вход, т.е., пользователь вводит email, а ему на почту приходит письмо типа

https://site/account?token=WKtwIZ8Hw47oWb8-HVMdQ6Xy1fNmMzPOfSVSPfBBGp5YzjgglHK_itZM-VPsF

Как организовать подобную идею?

поможет ли мне в этом wp_set_auth_cookie()?

делаю так

файл function.php

add_shortcode( 'fast_custom_login', 'fast_login' );

function fast_login() {

	$return = '<hr> <h3>Быстрый вход</h3><form method="post" action="http://localhost:8888/wp-content/themes/twentynineteen-parts/templates/php/signon.php " ><div id="gridForm" class="justify-content-center">      <div class="text-center text-muted mb-4">
				<input  type="text" name="fastlogin" id="fasrlogin" class="form-control" placeholder="Email" size="20">
			  </div> <input type="submit"  id="resetpass-button" class="btn btn-primary " value="Войти"></form>';
	 if ( isset( $_REQUEST['errno'] ) ) {
		$error_codes = explode( ',', $_REQUEST['errno'] );
					foreach ( $error_codes as $error_code ) {
			switch ( $error_code ) {
				case 'empty_email':
					$return .= '<span class="badge badge-pill badge-danger">Вы не забыли указать свой email/имя пользователя ?</span>';
					break;
				case 'invalid_email':
					$return .= '<span class="badge badge-pill badge-danger">На сайте не найдено указанного пользователя.</span>';
					break;
			}
		}
	}  
	return $return;        
}

файл signon.php

<?php
require_once ($_SERVER['DOCUMENT_ROOT'] . '/wp-load.php');

require_once ($_SERVER['DOCUMENT_ROOT'] . '/wp-admin/includes/upgrade.php');
global $wpdb;

	if ( $_SERVER['REQUEST_METHOD'] === 'POST' ) {
		if ( $_POST['fastlogin']  ) {

			$resul = $wpdb->get_results(" SELECT ID FROM `wp_users` WHERE `user_email` = '" .$_POST['fastlogin'] . "'");

			foreach ($resul as $resul) {
				nocache_headers();
				wp_clear_auth_cookie();
				$set_auth = wp_set_auth_cookie($resul->ID);

			}

			$login_url = home_url( '/login/' );
			$login_url = add_query_arg( 'errno', $set_auth , $login_url );
			$to = $_POST['fastlogin'];
			$subject = 'Быстрый вход';
			$message = $login_url;

			wp_mail( $to, $subject, $message);

после того как нажимаю кнопку, приходит письмо на почту, но без token, так как
wp_set_auth_cookie() срабатывает только после перезагрузки страницы, потом заново отправляю,уже приходит с токеном, но смысла от этого письма уже нет, так как пользователь и так уже авторизован, так вот ,как сделать что бы приходило сразу письмо с токеном, при этом пока пользователь не перейдет по ссылке,он не авторизуется?

Спасибо!

0
Сергей
5.2 года назад
  • 0
    Kama9616

    И что он потом всегда будет авторизовываться по ссылке?

    Вообще, для таких случаев, делают подтверждения мыла например и ограничивают функционал профиля если мыло не подтверждено ну или не авторизовывать если мыло не подтверждено.

    Подтверждение мыла в свою очередь делается примерно так: создается пароль и записывается в метаполе, и отправляется ссылка на почту. При переходе по этой ссылке, сверяется пароль и метаполе удаляется. Так, если метаполе есть, то аккаунт (мыло) не подтверждено.

    Комментировать
На вопросы могут отвечать только зарегистрированные пользователи. Вход . Регистрация