фон
У меня странный вопрос с простой строки кода, которые я не понимаю. У меня есть действие на контроллере, которое я использую для авторизации LinkedIn. При первом обращении пользователя к контроллеру он перенаправляется на сайт LinkedIn для аутентификации, как только пользователь будет аутентифицироваться, связанный в перенаправлении обратно на тот же контроллер с кодом auth в URL-адресе в качестве параметра.
http://beta.consynki.com/authentication/network/linkedin?code=DQTdGfxIlbsU...
Контроллер
class AuthenticationController extends WebController {
public function actionNetwork($network){
$access_token = Yii::$app->request->get('code');
$network_connection = NetworkFactory::build($network);
$client = $network_connection->getClient();
if($access_token && !is_null($access_token)){
$headers = Yii::$app->response->headers;
$headers->set('Pragma', 'no-cache');
$headers->add('X-Access-Token', $access_token);
return $this->render('success');
}
return $this->redirect($client->getLoginUrl(),302)->send();
}
}
EDIT 1 - WebController
/**
* Class WebController
*
* Default controller for public web pages. This class pulls meta tags from a seporately stored file, and makes
* them available to the view.
*
* @package www\components
*/
class WebController extends Controller {
public $meta = [];
public function beforeAction($event) {
$controller = $this->id;
$action = $this->action->id;
$meta_file = Yii::getAlias('@www') . '/meta/' . $controller . '/' . $action . '.php';
if (file_exists($meta_file)) {
$this->meta = include($meta_file);
$this->setMetaTags($this->meta);
}
return parent::beforeAction($event);
}
/**
* Set the meta tags for a page
*
* @param string $type
* @param $tag
* @param $value
*/
public function registerMetaTag($type = 'name', $tag, $value) {
if (!is_null($value)) {
$this->view->registerMetaTag([
$type => $tag,
'content' => $value
]);
}
}
public function behaviors() {
return [
/**
* The particular campaign used.
*
* Example social_share, stay_connected_add
*/
'utm_campaign' => [
'class' => 'common\behavior\TrackingBehavior',
'queryParam' => 'utm_campaign',
'sessionParam' => 'utm_campaign',
],
/*
* The source of the referral, could be an add network, facebook, email or just a link on the Consynki site.
*
* example: google, facebook, citysearch, welcome_email
*/
'utm_source' => [
'class' => 'common\behavior\TrackingBehavior',
'queryParam' => 'utm_source',
'sessionParam' => 'utm_source',
],
];
}
protected function setMetaTags($meta) {
foreach ($meta AS $key => $value) {
if (is_array($value)) {
$this->view->registerMetaTag($value, $key);
}
}
}
}
Проблема
Когда я пытаюсь получить code
из параметра GET Yii::$app->request->get('code');
, я получаю значение NULL. При дальнейшем проверке массива $ _GET var_dump($app->request->get()
или var_dump($_GET);
Я вижу ключ для переменной code
, перед ним стоит $ "?code"
. Это очень странно.
array(3) { ["network"]=> string(8) "linkedin" ["?code"]=> string(115) "DQTdGfxIlbsU..." ["state"]=> string(32) "12121..." }
Research Notes
Похоже Yii2 изменить это значение $ _GET, как она проходит маршрутизацией URL. Не уверен, что это проблема. Обновилась до последней версии yii, и это не устранило проблему.
Вопрос
Почему это произошло? Как я могу исправить это, чтобы получить значение code
?
Вы уверены, что 'actionNetwork ($ network) {'? Или, 'actionLinkedin ($ network) {'? –
Какое у вас правило UrlManager для этого URL? – Bizley
Эй @nana & @bizley, его 'actionNetwork ($ network)', мое правило маршрутизации выглядит так: '' аутентификация/сеть/ '=>' authentication/network ', ' –