我对 MVC 编程风格非常陌生。我有一个管理脚本,我希望能够将用户凭据集成到我的浏览器应用程序中。用户信息,例如用户名、电子邮件、姓名等。该系统的文档为生成此信息提供了清晰的说明。我在以下脚本中这样做了,它工作正常,但它总是会返回“AUTH_NO_SESSION”,因为我无法允许用户登录以获取此信息,这是我的问题:
用户信息 (user_cred.php)
include_once("includes.php");
$auth = new TAuthentication();
$accept_roles = array('plugin');
$auth_result = $auth->validateSession($accept_roles);
if ($auth_result->auth_code == AUTH_NO_SESSION) {
header('Access-Control-Allow-Origin: *');
echo "AUTH_NO_SESSION";
// means that no session was found, therefore the page is being accessed anonymously.
} elseif ($auth_result->auth_code == AUTH_OKAY) {
header('Access-Control-Allow-Origin: *');
echo "AUTH_OKAY";
// means that there was a session and the user owns all the required roles to access this content.
} elseif ($auth_result->auth_code == AUTH_INSUFFICIENT_ROLES) {
header('Access-Control-Allow-Origin: *');
echo "AUTH_INSUFFICIENT_ROLES";
// means that a session exists, but the user does not own the required roles to access this content.
} else {
// no code here
}
浏览器应用程序将从user_cred.php
上面的文件中检索用户数据。就从这个 php 文件请求信息而言,一切正常。我面临的问题实际上是获取用户信息,而唯一的方法是让用户登录他们的帐户。否则什么都不会给。
浏览器应用
<!DOCTYPE html>
<html>
<head>
<script type="text/javascript">
function loadXMLDoc()
{
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
}
}
xmlhttp.open("GET","user_cred.php",true);
xmlhttp.send();
}
</script>
</head>
<body>
<h2>Using the XMLHttpRequest object</h2>
<div id="myDiv"></div>
<button type="button" onclick="loadXMLDoc()">Change Content</button>
</body>
</html>
在管理系统中有一个view
具有以下登录表单的文件。以便用户访问网站。您还拥有包含登录代码的主索引文件。以我有限的知识,我已经看过这个并相信这两个文件将帮助我编写脚本,以便用户可以从浏览器应用程序登录并获取他们的用户凭据。我的想法是将 index.php 文件中的代码添加到 user_cred.php 文件中,以便我可以将这样的 url 添加http://website.com/user_cred.php?username=admin&pass=test&signin=Login
到 javascript httprequest 并以这种方式获取用户信息
登录视图
<form action="<?php echo $_SERVER["PHP_SELF"]; ?>" method="post">
<ul>
<li class="listitem">
<div class="row">
<label>Username:</label>
<input class="textbox" type="text" name="username" value="" maxlength="80"/>
</div>
<div class="row">
<label>Password:</label>
<input class="textbox" type="password" name="password" value="" maxlength="80"/>
</div>
</li>
<li class="listitem">
<div class="row">
<input class="form-button" type="submit" name="signin" value="Signin"/>
<a class="loginoptions indentmore" href="signup.php">Signup</a>
<a class="loginoptions" href="resetpassword.php">Forgot your password?</a>
</div>
</li>
</ul>
</form>
索引.php
include_once("includes.php");
class TSigninController extends TAbstractController {
public function run($allowedRoles = null)
{
$this->allowedRoles = $allowedRoles;
$this->execute();
}
protected function execute()
{
$this->auth_result = parent::validateSession(null);
if ($this->auth_result->auth_code == AUTH_OKAY)
{
$this->goToAfterSignInPage($this->auth_result->roles);
}
else if (!$this->getUserAction())
{
$this->loadview("signin");
}
else
{
$this->signin();
}
}
protected function signin()
{
$input = $this->getUserInput();
$model = $this->loadmodel("Users");
$account = $model->getUser($input["username"], $input["password"]);
if ($account == null || sizeof($account) == 0)
{
$data = array("error" => "Could not sign you in");
$this->loadview("signin", $data);
return;
}
if ($account["disabled"] == 1 || $account["admin_disabled"] == 1)
{
$data = array("error" => ($account["admin_disabled"] == 0) ? "This account is disabled." : "This account is been locked by the admin. Please contact the site admin!");
$this->loadview("signin", $data);
return;
}
$this->createNewSession($account);
$this->goToAfterSignInPage($account["roles"]);
}
protected function createNewSession($account) {
$model = $this->loadmodel("Sessions");
$sessionid = crypt($account["username"] . date('now'));
$_SESSION['SESSIONID'] = $sessionid;
$model->createNewSession($sessionid, $account["id"]);
}
public function goToAfterSignInPage($roles)
{
foreach($roles as $role)
{
if ($this->utils->stringsEqual($role["name"], "admin", false))
{
$this->redirect(SITE_URL . "/admin/dashboard.php");
return;
}
}
$this->redirect(SITE_URL . "/user/userprofile.php");
}
protected function getUserAction()
{
if ($this->post("signin"))
return "signin";
else
return null;
}
protected function getUserInput()
{
return array(
"username" => $this->post("username"),
"password" => $this->post("password")
);
}
}
$controller = new TSigninController();
$controller->run();
总之,我正在寻求帮助,以便我制作一个 php 脚本user_cred.php
,允许用户从我的浏览器应用程序中访问他们的凭据。所以任何具有 MVC 和 PHP 知识的人都会非常感激。