【发布时间】:2021-02-21 09:34:52
【问题描述】:
我有一个 PHP 脚本,它接受用户名和密码,并将用户登录到 wordpress。如果我创建一个简单的表单并使用它工作的表单发布值。但是,如果我将值放在 url 中并使用 get 它不会。我看到数据仍然回显,但登录不起作用。有没有人有什么想法。
所以这行得通:
表格:
<form action="/signon.php" method="post">
<input type="text" id="email" name="email" class="form-control" placeholder="email" required autofocus>
<input type="password" id="password" name="password" class="form-control" placeholder="password" required>
<button class="btn btn-lg btn-primary btn-block" type="submit">Sign in</button>
</form>
脚本
<?php
/**
* custom log in functionality
*/
//load wordpress
if (file_exists($_SERVER['DOCUMENT_ROOT'] . '/wp-load.php')) {
require_once($_SERVER['DOCUMENT_ROOT'] . '/wp-load.php');
}
if ( !isset($_POST["email"]) || !isset($_POST["password"]) ) {
echo "no user or pass set";
return;
}
if (is_email($_POST['email'])) {
$user = get_user_by('email', $_POST['email']);
if (empty($user)) {
echo "no user email set";
//wp_redirect($_POST['_wp_http_referer']);
exit;
}
} else {
$user = get_user_by('login', $_POST['email']);
if (empty($user)) {
echo "no username set";
//wp_redirect($_POST['_wp_http_referer']);
exit;
}
}
$user_admin_url = get_blogaddress_by_id($user->primary_blog) . 'wp-admin/';
$creds = array();
$creds['user_login'] = $user->user_login;
$creds['user_password'] = $_POST['password'];
$creds['remember'] = true;
$user = wp_signon($creds, false);
if (is_wp_error($user)) {
echo "login error";
exit;
}
wp_set_current_user($user->ID);
wp_set_auth_cookie($user->ID);
wp_redirect($user_admin_url);
exit;
?>
如果我将它放在浏览器栏中并将 $_POST 更改为 $_GET 则不会
urltoscript.com/signon.php?email=someloginemail@me.com&password=123
脚本
<?php
/**
* custom log in functionality
*/
//load wordpress
if (file_exists($_SERVER['DOCUMENT_ROOT'] . '/wp-load.php')) {
require_once($_SERVER['DOCUMENT_ROOT'] . '/wp-load.php');
}
if ( !isset($_GET["email"]) || !isset($_GET["password"]) ) {
echo "no user or pass set";
return;
}
if (is_email($_GET['email'])) {
$user = get_user_by('email', $_GET['email']);
if (empty($user)) {
echo "no user email set";
//wp_redirect($_GET['_wp_http_referer']);
exit;
}
} else {
$user = get_user_by('login', $_GET['email']);
if (empty($user)) {
echo "no username set";
//wp_redirect($_GET['_wp_http_referer']);
exit;
}
}
$user_admin_url = get_blogaddress_by_id($user->primary_blog) . 'wp-admin/';
$creds = array();
$creds['user_login'] = $user->user_login;
$creds['user_password'] = $_GET['password'];
$creds['remember'] = true;
$user = wp_signon($creds, false);
if (is_wp_error($user)) {
echo "login error";
exit;
}
wp_set_current_user($user->ID);
wp_set_auth_cookie($user->ID);
wp_redirect($user_admin_url);
exit;
?>
【问题讨论】:
-
但实际上,不要将凭据放在查询字符串上。你为什么要这样做?
-
另外我认为
@应该是url编码为%40 -
对不起@kerbh0lz 这是我帖子中的错误
标签: php