1

有人知道是否已经有一个库允许类似终端的仿真,以便管理员可以在 wp-admin 站点上以两步方式输入他的凭据?

首先,他应该能够输入他的用户名,按回车键,然后输入他的密码。根据输入的有效性,一条消息应该是可见的并且应该发生重定向。

在这方面,我知道某些 jQuery 库可以模拟特定的终端样式,但据我所知,有一些工作代码可以满足我上面提到的需求。也许我也太缺乏经验,没有注意到插件具有所需的功能,或者也许有一种非常不同的方式可以实现我的愿望,有人可以帮助我。

无论如何,我感谢您为我指明了正确的方向。

附加信息

我的目标只是建立一个登录页面——而不是登录过程之后的整个 wordpress 管理。这将是荒谬的。在这个演示中可以找到这个登录屏幕如何运作和表现的一个很好的例子。

4

2 回答 2

0

实际上,如果您只需要像登录这样的终端(而不是管理),它可以很容易地完成

  1. 您需要制作一些带有绿色文本的黑色页面 - 您可以使用 login_init 操作重写标准 wp-login 表单,或者您可以例如制作一个名为“login”的新页面,然后在您的模板文件夹中制作 page-login.php
  2. 你会放一个标准的登录表单,比如

    <form name="loginform" id="loginform" action="" method="post">
    <p id="user">
        <label for="user_login">Username<br />
        <textarea type="text" name="log" id="user_login" class="input" value="" cols="80" tabindex="10" ></textarea></label>
    </p>
    <p id="password">
        <label for="user_pass">Password<br />
        <textarea type="password" name="pwd" id="user_pass" class="input" value="" cols="80" tabindex="20" ></textarea></label>
    </p>
    <p id="submit">
        <button name="wp-submit" id="wp-submit" class="button-primary" tabindex="100" >Login</button>
    </p>
    

    我只是使用文本区域而不是输入,因为在终端中您可以放置​​更多行文本和按钮而无需 type=submit,因此单击输入时不会触发表单

  3. 您将使用 CSS 或 javascript 隐藏除 #user 之外的所有字段(javascript 隐藏更便于访问)。

  4. 您将标签样式设置为绿色文本,将文本区域设置为黑色背景、无边框、绿色文本。

  5. 如果您想测试,如果用户存在,在测试密码之前,就像在某些终端上一样(我不建议,它会降低安全性),然后您可以进行测试,如果密码不在 $_POST 中并仅检查用户名当用户单击输入时使用http://codex.wordpress.org/Function_Reference/username_exists函数(更好的是使用例如 ajax 的一些异步方式)。

  6. 当之前的检查正常(用户存在)时,您将第一个 textarea 设为只读并仅显示#password。

  7. 点击回车后,您将检查http://codex.wordpress.org/Function_Reference/user_pass_ok,如果确定,您会将他重定向到 /wp-admin(您可以简单地使用 post 将凭据发送到 wp_login.php)。如果没有,您将再次显示表单(例如,使用预填充用户并将某些 $counter 设置为 ++,当 $counter >= 3 时,您会将他发送到主页。

于 2012-10-11T17:28:31.303 回答
0

您可以编写使用 XML-RPC 的 php 脚本来测试登录密码是否正确。所有 wordpress 方法都有用户名和密码,因此您可以选择wp.getOptions之类的任何方法(这是安全的,因为它不会更改任何内容,但您需要进行身份验证),如果用户/密码输入错误,它将返回错误 403是对的这是php代码:

<?php

function post($url, $data) {
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    return curl_exec($ch);
}

function authenticate($user, $password) {
    $request = '<?xml version="1.0"?>
    <methodCall>
      <methodName>wp.getOptions</methodName>
      <params>
        <param>
          <value><int>0</int></value>
        </param>
        <param>
          <value><string>' . $user . '</string></value>
        </param>
        <param>
          <value><string>' . $password . '</string></value>
        </param>
      </params>
    </methodCall>';
    $url = 'http://www.domektkaczki.pl/xmlrpc.php';
    $regex = '/<name>faultCode<\/name>.*<value><int>403<\/int><\/value>/s';
    return !preg_match($regex, post($url, $request));
}
header('Content-Type: text/plain');
if (isset($_GET['user']) && isset($_GET['passwd'])) {
    echo authenticate($_GET['user'], $_GET['passwd']) ? 'true' : 'false';
} else {
    echo 'false';
}

然后在javascript中,您只需在终端中调用该脚本

$('body').terminal($.noop, {
    login: function(user, passwd, callback) {
        $.getJSON('auth.php', {user:user, passwd:passwd}, function(response) {
            if (response) {
                // the page redirected_page.php need to be password protected
                // because users will be able to see the code and open that page directly
                // you can use sessions to save value if user put right credentials
                // in auth.php and in redirected_page.php you can check
                // if that value is set
                window.location = 'redirected_page.php';
            } else {
                callback(null);
            }
        });
    }
});

如果您想实现更多的 wordpress 命令,您可以使用xmlrpc 库,这里是如何创建客户端的代码。如果您想在 javascript 中使用命令,您的登录应该返回一个可以在 javascript 中使用的令牌。

编辑:如果您想登录管理界面并(从终端)登录,那么您可以检查 wp-login,打开开发人员工具,检查网络选项卡中的保留日志并查看发送到服务器的请求。然后您可以在登录功能中使用 AJAX 而不是我编写的 php 脚本来执行相同的请求。您需要检查当您输入错误密码时发送什么响应,并在正确时需要,并使用与 JS 代码中相同的位置和回调(空)。

于 2013-07-20T12:29:45.790 回答