OpenId (Google など) でユーザーを登録する必要があります
が、うまくいきません!
私はすでにいくつかのトピックを見てきました:
http://framework.zend.com/issues/browse/ZF-6905
Zend OpenId と Google
その他..
しかし、それはすべてうまくいきません!
ユーザー情報(ログインやメールなど)を取得する必要がありますが、このように使用すると
// $data['openidIdentifier'] = 'https://www.google.com/accounts/o8/id';
public function loginByOpenIdAction() {
$request = $this->getRequest();
$form = new Application_Form_UsersLoginByOpenId();
$this->view->headTitle('Login by OpenId');
if ($request->isPost()) {
$data = $request->getPost();
if ($form->isValid($data)) {
$consumer = new Zend_OpenId_Consumer();
$backUrl = $this->getHelper('Url')->url(array('controller' => 'users', 'action' => 'signup-from-open-id'));
if (!$consumer->login($data['openidIdentifier'], $backUrl)) {
$this->view->error = 'Can`t connect to OpenId provider';
}
}
}
$this->view->form = $form;
}
public function signupFromOpenIdAction() {
$consumer = new Zend_OpenId_Consumer();
$data = &$_GET;
$sreg = new Zend_OpenId_Extension_Sreg(array(
'nickname' => true,
'email' => false,
'fullname' => false), null, 1.1
);
if ($consumer->verify($data, $id, $sreg)) {
$properties = $sreg->getProperties();
var_dump($properties);
var_dump('allow', $id);
} else {
var_dump('deny', $id, $consumer);
}
die;
}
出力は次のとおりです。
文字列「拒否」(長さ=4) 文字列 'https://www.google.com/accounts/o8/id?id=fooBarFooBar' (長さ = 80) オブジェクト (Zend_OpenId_Consumer)[61] 保護された '_storage' => オブジェクト (Zend_OpenId_Consumer_Storage_File)[62] プライベート '_dir' => 文字列 '/tmp/azat/openid/consumer' (長さ = 25) 保護された '_dumbMode' => ブール値 false 保護された '_cache' => 配列 空の プライベート '_httpClient' => null プライベート '_session' => null プライベート '_error' => 文字列 'Extension::parseResponse 失敗' (長さ = 32)
助けてください: サインアップ ユーザーの openid サーバー (Google など) からユーザー情報を取得するにはどうすればよいですか?
使用し$consumer->verify($data, $id)
ても大丈夫ですが、サインアップにはユーザー情報が必要です
また、ネイティブの Zend_OpenId_Consumerでは機能しないため、この問題http://framework.zend.com/issues/browse/ZF-6905の Zend_OpenId_Consumer を使用します。$consumer->verify($data, $id)
また、いくつかのブローカー、または openid で動作する他のライブラリを使用することも提案されていません。