0

我有一个网站在一个不太知名的 CMS 上运行,叫做 Ushahidi。内置 OpenID 功能,人们可以使用 Facebook 或 Google 登录。

我没有足够的开发技能来理解这里发生的事情,但是,我似乎几乎可以让它工作,除了,我在我自己的谷歌登录上尝试测试它时收到以下错误:

检测到错误导致无法加载此页面。如果此问题仍然存在,请联系网站管理员。应用程序/控制器/login.php [503]:未定义变量:用户

我怀疑,但不确定,定义变量很容易,但由于我缺乏知识,我希望在这里问某人是否可以看到我需要在哪里定义变量。第 503 行是大约 100 行的更大代码块的一部分,我知道在此处发布更大的代码块不是一个好习惯,但我真的不确定什么是相关的和不相关的。所以请原谅我。我用粗体突出显示了第 503 行所在的位置。谁能指出我必须在这里做什么?

// OpenID Post
            try
            {
                $openid = new OpenID;

                // Retrieve the Name (if available) and Email
                $openid->required = array("namePerson", "contact/email");

                if( ! $openid->mode)
                {
                    if(isset($_POST["openid_identifier"]))
                    {
                        $openid->identity = $_POST["openid_identifier"];
                        header("Location: " . $openid->authUrl());
                    }
                }
                elseif ($openid->mode == "cancel")
                {
                    $openid_error = TRUE;
                    $message_class = 'login_error';
                    $message = "You have canceled authentication!";
                }
                else
                {
                    if ($openid->validate())
                    {
                        // Does User Exist?
                        $openid_user = ORM::factory("openid")
                            ->where("openid", $openid->identity)
                            ->find();

                        if ($openid_user->loaded AND $openid_user->user)
                        {
                            // First log all other sessions out
                            $auth->logout();

                            // Initiate Ushahidi side login + AutoLogin
                            $auth->force_login($openid_user->user->username);

                    // Exists Redirect to Dashboard
        **(THIS IS LINE 503)**         url::redirect($user->dashboard());
                        }
                        else
                        {
                            // Does this openid have the required email??
                            $new_openid = $openid->getAttributes();
                            if ( ! isset($new_openid["contact/email"]) OR
                                empty($new_openid["contact/email"]))
                            {
                                $openid_error = TRUE;
                                $message_class = 'login_error';
                                $message = $openid->identity . " has not been logged in. No Email Address Found.";
                            }
                            else
                            {
                                // Create new User and save OpenID
                                $user = ORM::factory("user");

                                // But first... does this email address already exist
                                // in the system?
                                if ($user->email_exists($new_openid["contact/email"]))
                                {
                                    $openid_error = TRUE;
                                    $message_class = 'login_error';
                                    $message = $new_openid["contact/email"] . " is already registered in our system.";
                                }
                                else
                                {
                                    $username = "user".time(); // Random User Name from TimeStamp - can be changed later
                                    $password = text::random("alnum", 16); // Create Random Strong Password

                                    // Name Available?
                                    $user->name = (isset($new_openid["namePerson"]) AND ! empty($new_openid["namePerson"]))
                                        ? $new_openid["namePerson"]
                                        : $username;
                                    $user->username = $username;
                                    $user->password = $password;
                                    $user->email = $new_openid["contact/email"];

                                    // Add New Roles
                                    $user->add(ORM::factory('role', 'login'));
                                    $user->add(ORM::factory('role', 'member'));

                                    $user->save();

                                    // Save OpenID and Association
                                    $openid_user->user_id = $user->id;
                                    $openid_user->openid = $openid->identity;
                                    $openid_user->openid_email = $new_openid["contact/email"];
                                    $openid_user->openid_server = $openid->server;
                                    $openid_user->openid_date = date("Y-m-d H:i:s");
                                    $openid_user->save();

                                    // Initiate Ushahidi side login + AutoLogin
                                    $auth->login($username, $password, TRUE);

                                    // Redirect to Dashboard
                                    url::redirect($user->dashboard());
                                }
                            }
                        }
                    }
                    else
                    {
                        $openid_error = TRUE;
                        $message_class = 'login_error';
                        $message = $openid->identity . "has not been logged in.";
                    }
                }
            }
            catch (ErrorException $e)
            {
                $openid_error = TRUE;
                $message_class = 'login_error';
                $message = $e->getMessage();
            }
4

1 回答 1

0

问题是代码在实际定义之前使用了几行 $user 。不过,这可能是一个错字——也许第 503 行的 $openid_user->user->dashboard() 可能会起作用,尽管它是一个 WAG。

于 2013-09-29T16:24:29.423 回答