openId. как?

Agatov

Новичок
openId. как?

Нужно прикрутить к проекту авторизацию посредством livejournal openId.

Посредством гугла нашёл тонны информации о том какая хорошая вещь этот openId, но ни одного примера применения на практике.

Понимаю, что для авторизации посредством openId нужно отправлять адрес блога пользователя куда-то на livejournal, а оттуда придёт ответ. Но ни формат этого запроса, ни формат ответ я найти не смог.

Может кто уже работал с этим чудом, подскажите что и как?
 

_RVK_

Новичок
Лично я воспользовался Simple OpenID PHP

Вот пример кода

PHP:
    public function AuthUser($oid = false) {
        if (Enviroment::Post('openid')){ // Get identity from user and redirect browser to OpenID Server
            $openid = new SimpleOpenID;
            $openid->SetIdentity(Enviroment::Post('openid'));
            $openid->SetTrustRoot('http://' . $_SERVER["HTTP_HOST"]);
            $openid->SetRequiredFields(array('email','fullname'));
            $openid->SetOptionalFields(array('dob','gender','postcode','country','language','timezone'));
            if ($openid->GetOpenIDServer()){
                $openid->SetApprovedURL('http://' . $_SERVER["HTTP_HOST"] . '?action=OpenIdLogin&module=Index');      // Send Response from OpenID server to this script
                $openid->Redirect();     // This will redirect user to OpenID Server
            }else{
                return false;
            }
            exit;
        }
        else if(Enviroment::GET('openid_mode') == 'id_res'){     // Perform HTTP Request to OpenID server to validate key
            $openid = new SimpleOpenID;
            $openid->SetIdentity(Enviroment::GET('openid_identity'));
            $openid_validation_result = $openid->ValidateWithServer();
        }else if (Enviroment::GET('openid_mode') == 'cancel'){ // User Canceled your Request
            return false;
        }

        if ($openid_validation_result) {
            if (!isset($_REQUEST[session_name()])) {
               session_start();
            }

            $_SESSION['openid'] = str_replace('http://', '', $openid->GetIdentity());
            $_SESSION['login'] = str_replace('http://', '', $openid->GetIdentity());

            if (!$this->UserExist($_SESSION['login'])) {
                $user = new Users();
                $user->login = str_replace('http://', '', $openid->GetIdentity());
                $user->pass = rand(15678, 220222);
                $user->openid = 1;
                $user->save();

                $id = $user->InsertId;
            } else {
                $res = $this->ExecSql('SELECT id FROM users WHERE login = #user', array('user' => $_SESSION['openid']));
                $id = $res->fetchField('id');
            }
            $_SESSION['user_id'] = $id;

            return true;
        } else  {
            return false;
        }
    }
Это код класса из Envos. Думаю суть понятна
 
Сверху