#php #cakephp #openid #cakephp-3.0
#php #cakephp #OpenID #cakephp-3.0
Вопрос:
Я пытаюсь заставить OpenID Steamauthentification работать в моем приложении CakePHP3, используя это в качестве своего источника: https://github.com/SmItH197/SteamAuthentication
Я создал новый компонент аутентификации, и он работает нормально, но мне пришлось добавить несколько строк кода (помеченных // ), которые, на мой взгляд, просто не имеют смысла:
public function authenticate(Request $request, Response $response)
{
$openid = new LightOpenID($steamauth['domainname']);
debug($openid);//
if (!$openid->mode) {
$openid->identity = 'http://steamcommunity.com/openid';
header('Location: ' . $openid->authUrl());
$openid->authUrl();//
debug($openid);//
} elseif ($openid->mode == 'cancel') {
echo 'User has canceled authentication!';
} else {
if ($openid->validate()) {
$id = $openid->identity;
$ptn = "/^http://steamcommunity.com/openid/id/(7[0-9]{15,25} )$/";
preg_match($ptn, $id, $matches);
debug($matches[1]);// steam id
return $matches;
} else {
return false;
}
}
return false;
}
Итак, без этих 3 строк это не работает. debug возвращает саму переменную, а authUrl() возвращает строку Url.
У кого-нибудь есть идея, почему я должен возвращать переменные, чтобы запустить это? Может ли это быть проблемой PHP7?
Соответствующий метод можно найти в файле githubrep steamauth.php .
Ответ №1:
authUrl(): является ли запрос URL-адреса для аутентификации в соответствии с вашей версией аутентификации, проверьте здесь строку 854
возврат функции: функция возвращает в основном TRUE и FALSE, если какие-либо данные возвращаются, то они работают как true; если нет, то возвращается как false.
В вашем случае, если вы возвращаете TRUE
return true;
установить
return $matches;
это также должно работать