【问题标题】:Different authentication for different classes using Restler使用 Restler 对不同类进行不同的身份验证
【发布时间】:2012-03-02 19:12:03
【问题描述】:

我正在尝试构建一个 REST api(使用 Restler),它接受用户名和密码进行登录并生成会话密钥。生成 sessionkey 后,用户将能够传递此会话密钥来访问 api 中的其他类。是否可以获取调用__isAuthenticated函数的类名?

我的身份验证类:

<?php
class Auth implements iAuthenticate
{
    public static $sessionKey;
    public static $currentUser;
    public $tempsesskey;

    function __isAuthenticated ()
    {
        if (isset($_GET['useremail']) && isset($_GET['userpass'])) {
            $user = $_GET['useremail'];
            $pass = $_GET['userpass'];
            $user = mysql_real_escape_string($user);
            $pass = mysql_real_escape_string($pass);
            mysql_query(
            "UPDATE `userdetail` SET lastlogin=NOW()
            WHERE useremail='$user' AND userpass=md5('$pass')");
            if (mysql_affected_rows() > 0) {
                $result = mysql_query(
                "SELECT sessionkey from usersession where TIMESTAMPDIFF(MINUTE,lastactivity,now()) < 20 and useremail='$user'");
                while ($row = mysql_fetch_assoc($result)) {
                    $tempsesskey = $row['sessionkey'];
                }
                if (strlen($tempsesskey) > 0) {
                    mysql_query(
                    "UPDATE usersession set lastactivity=now() where sessionkey='$tempsesskey'");
                } else {
                    $tempsesskey = generateKey(52);
                    mysql_query(
                    "UPDATE `usersession` set sessionkey='$tempsesskey',keyvalid='Y' where useremail='$user'");
                }
                self::$currentUser = $user;
                self::$sessionKey = $tempsesskey;
                return TRUE;
            }
        } else 
            if (isset($_GET['sessionkey'])) {
                $sesskey = $_GET['sessionkey'];
                $sesskey = mysql_real_escape_string($sesskey);
                $result = mysql_query(
                "SELECT sessionkey from usersession where sessionkey='$sesskey' and TIMESTAMPDIFF(MINUTE,lastactivity,now()) < 20");
                if (mysql_affected_rows() > 0) {
                    while ($row = mysql_fetch_assoc($result)) {
                        $tempsesskey = $row['sessionkey'];
                        self::$sessionKey = $tempsesskey;
                    }
                    return TRUE;
                }
            }
    }
}

【问题讨论】:

    标签: php api authentication rest


    【解决方案1】:

    有一种简单的方法可以通过添加自定义 php 文档注释 /annotation 来设置 Authentication 类的属性,这在 Authentication with ACL. 中进行了解释。您也可以使用相同的技术来实现您的目的

    【讨论】:

      猜你喜欢
      • 2014-02-22
      • 1970-01-01
      • 2021-10-06
      • 1970-01-01
      • 2016-08-14
      • 2015-03-19
      • 1970-01-01
      • 2013-06-28
      • 2013-09-18
      相关资源
      最近更新 更多