CakePHP를 위한 OpenID component

Posted at 2009/06/18 11:16 // in 웹프로그래밍™/CakePHP // by 블루비
CakePHP 에서 사용할 수 있는 OpenID 컴포넌트 입니다.

설치 방법

  • OpenID component 를 다운받습니다.
  • “app/controllers/components” 위치에 다운받은 openid.php 파일을 복사 합니다.
  • PHP OpenID Library 2.1.x 를 다운 받습니다.
  • “Auth” 디렉토리를 “vendors” 디렉토리에 복사합니다.
  • “Auth/OpenID/Consumer.php” 파일 소스을 변경해주세요
    if (Auth_OpenID::arrayGet($q, $key) != $value) {

    on line 922 with

    if ($key != 'url' && Auth_OpenID::arrayGet($q, $key) != $value) {
  • EAUT library 를 다운받은 후 , Email.php 파일을 Auth/Yadis 디렉토리에 복사합니다.
  • controller(s) 에서 component 를 추가하여 사용할 수 있습니다:
    public $components = array('Openid');

사용 예제

Login form (app/views/users/login.ctp):

<?php
if (isset($message)) {
echo '<p class="error">'.$message.'</p>';
}
echo $form->create('User', array('type' => 'post', 'action' => 'login'));
echo $form->input('OpenidUrl.openid', array('label' => false));
echo $form->end('Login');
?>

And the controller (app/controllers/users_controller.php):

<?
class UsersController extends AppController {
public $components = array('Openid');
public $uses = array();

public function login() {
$returnTo = 'http://'.$_SERVER['SERVER_NAME'].'/users/login';

if (!empty($this->data)) {
try {
$this->Openid->authenticate($this->data['OpenidUrl']['openid'], $returnTo, 'http://'.$_SERVER['SERVER_NAME']);
} catch (InvalidArgumentException $e) {
$this->setMessage('Invalid OpenID');
} catch (Exception $e) {
$this->setMessage($e->getMessage());
}
} elseif (count($_GET) > 1) {
$response = $this->Openid->getResponse($returnTo);

if ($response->status == Auth_OpenID_CANCEL) {
$this->setMessage('Verification cancelled');
} elseif ($response->status == Auth_OpenID_FAILURE) {
$this->setMessage('OpenID verification failed: '.$response->message);
} elseif ($response->status == Auth_OpenID_SUCCESS) {
echo 'successfully authenticated!';
exit;
}
}
}

private function setMessage($message) {
$this->set('message', $message);
}
}
?>
2009/06/18 11:16 2009/06/18 11:16

http://blueb.net/blog/trackback/1429

댓글을 남겨주세요.

[로그인][오픈아이디란?]