2013-09-29 2 views
0

У меня есть сайт, работающий на менее известной CMS под названием Ushahidi. Существует встроенная функция OpenID, где люди могут подключаться к Facebook или Google.Неопределенная переменная с OpenID

У меня недостаточно навыков, чтобы понять, что происходит здесь, но похоже, что я почти заработал, кроме того, что я получаю следующую ошибку при попытке проверить ее на своем собственном входе в Google. :

Обнаружена ошибка, которая предотвратила загрузку этой страницы. Если эта проблема сохраняется, обратитесь к администратору веб-сайта. приложение/контроллеры/login.php [503]: Undefined переменной: пользователь

Я подозреваю, но я не уверен, что определение переменной достаточно легко, но так как я не хватает знаний, я надеялся, попросить кого-то здесь если бы они могли видеть, где мне нужно определить переменную. Строка 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(); 
      } 
+1

Проблема в том, что код использует '$ user' несколько строк, прежде чем он будет определен. Однако это может быть опечатка - возможно, '$ openid_user-> user-> dashboard()' может работать, хотя это WAG. – andrewsi

+0

Спасибо за отзыв andrewsi. Но где бы я разместил этот фрагмент, который вы предоставили? На линии 503? Или в начале блока? –

+1

Заменить '$ user-> dashboard()' в строке 503 с '$ openid_user-> user-> dashboard()'. Я понятия не имею, будет ли это работать, но эй, сейчас он не работает, поэтому он не может ухудшить ситуацию. – andrewsi

ответ

0

Проблема в том, что код использует $ user несколько строк, прежде чем он будет определен. Это может быть опечатка - возможно, $ openid_user-> user-> dashboard() в строке 503 может работать, хотя это WAG.

Смежные вопросы