1

ウェブサイトにSteam OpenIDログインを実装しようとしていますが、それがどのように行われているか、SteamがOpenIDでログインしているユーザーをどのように検証するかはよくわかりません。

今のところ私が見つけたのは、SteamはユーザーIDのみを返し、他には何も返さないため、残りのことについてはAPIを使用してユーザーの他の情報を取得する必要があるということです.

しかし、誰かが OpenID 経由でログインすると、ユーザーが Web サイトでどのように検証されるのかよくわかりません。

ユーザーが OpenID からログインしたら、セッションを作成したり、Cookie を設定したり、ユーザーをデータベースに保存したりする必要がありますか?

try {
# Change 'localhost' to your domain name.
$openid = new LightOpenID('http://localhost/openid');
if(!$openid->mode) {
    if(isset($_GET['login'])) {
        $openid->identity = 'http://steamcommunity.com/openid';
        header('Location: ' . $openid->authUrl());
    }
echo '<li><a href="?login"><img border="0" src="http://cdn.steamcommunity.com/public/images/signinthroughsteam/sits_small.png" /></a></li>';
}

elseif($openid->mode == 'cancel') {
    echo 'User has canceled authentication!';
}

else {
    $_SESSION['loged']=1;

    header('Location: http://localhost/openid');

}

if(isset($_SESSION['loged'])) {

echo '<li><a href="?logout">Logout</a></li>';

}
if(isset($_GET['logout'])) {
    unset($_SESSION['loged']);
}

echo 'User ' . ($openid->validate() ? $openid->identity . ' has ' : 'has not ') . 'logged in.';

}

catch(ErrorException $e) {
echo $e->getMessage();
}

このコードを例として取り上げます

私はそれを推測する

if(!openid->mode)

openid が設定されていない場合は? ログインボタンを表示し、openidプロバイダーに移動して、そのボタンを押した場合にログインするよりも

次は、ユーザーがログインしていない場合は、キャンセル メッセージを表示します。

または次の部分は、ユーザーがログインしている場合です。openid はユーザー ID のみを返すため、何らかの形で彼に対処し、彼を私の Web サイトにログインさせておく必要があります。その部分では、セッションを設定してリダイレクトしたセッションまたは Cookie を設定する必要があります。ユーザーはホームページに戻ります。

しかし、私はいくつかのことを理解していません。

ログインボタンが常に表示されるのはなぜですか?

この

echo 'User ' . ($openid->validate() ? $openid->identity . ' has ' : 'has not ') . 'logged in.';

なぜ機能しないのですか?ユーザーがログインしていないことを常に示します

4

1 に答える 1