0

Ushahidi と呼ばれるあまり知られていない CMS で実行されている Web サイトがあります。Facebook や Google でログインできる OpenID 機能が組み込まれています。

ここで何が起こっているのかを理解するのに十分な開発スキルがありませんが、自分の Google ログインでテストしようとすると次のエラーが表示されることを除けば、ほとんど機能しているようです。

このページの読み込みを妨げるエラーが検出されました。この問題が続く場合は、ウェブサイトの管理者に連絡してください。application/controllers/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 を数行使用していることです。ただし、タイプミスである可能性があります。WAG ですが、503 行目の $openid_user->user->dashboard() が機能する可能性があります。

于 2013-09-29T16:24:29.423 に答える