У меня есть сайт, работающий на менее известной 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();
}
Проблема в том, что код использует '$ user' несколько строк, прежде чем он будет определен. Однако это может быть опечатка - возможно, '$ openid_user-> user-> dashboard()' может работать, хотя это WAG. – andrewsi
Спасибо за отзыв andrewsi. Но где бы я разместил этот фрагмент, который вы предоставили? На линии 503? Или в начале блока? –
Заменить '$ user-> dashboard()' в строке 503 с '$ openid_user-> user-> dashboard()'. Я понятия не имею, будет ли это работать, но эй, сейчас он не работает, поэтому он не может ухудшить ситуацию. – andrewsi