参加する代わりに
今日のLoginzaサービスについてはそれほどではありません
利用可能な情報は、主に開発者自身からのものであり、かなり乾燥しています。 それは
変です。 私自身の開発経験についてお話したいと思います。
私は、認証問題の解決策に直面しなければなりませんでした
FacebookおよびVKontakteを介したWebサイト。 グーグルでしばらくの間、Loginzaに出会いました。 よく見て、
試してみることにしました。
ドキュメントは存在しますが、私の意見では、少し貧弱です。 いくつかの例があります。 準備ができています
ねじれのないエンジン用の承認モジュール。 この投稿では、簡単に
プロジェクトで適用したアルゴリズムを教えてください。
準備段階
準備段階全体が最終的なビューを表すためにデモを表示することになります
loginzでの登録。 登録は簡単です。Yandexアカウントで登録しました。
電子メールは、アクティベーションへのリンクが記載された確認メールを即座に受信しました。
個人アカウントLoginzaのインターフェースで、サイトを登録する必要があります。 そして取る
ファイルをサイトに投稿して権利を確認してください。 Yandexのウェブマスターのように(ところで、誰も知らない-
YandexはLoginzを購入しました)。
権限が確認されたら、ウィジェットIDとウィジェットの秘密鍵を取得できます。
認証スクリプトを開発するために必要になります。 また、必要な設定で
[セーフモード]ボックスをオンにします。 「危険な体制」、過去に明らかに、について
セキュリティ投稿の最後にいくつかの言葉。
最後の準備ステップは、ウィジェットのHTMLコードを取得することです。 あなたはそれをすべて行うことができます
同じマイウィジェット管理ページ。
ベース開発
私の実装は完全であると主張しませんが、完全に表示されます
何が起こっているかの本質。
「ログインを介した」承認は、単に次の間の層であることを理解する必要があります
ソーシャルユーザー ネットワークとウェブサイト。 成功したログイン認証はまだ与えません
サイトでの承認。 通常、サイトでの承認のために、ユーザーは入力する必要があります
有効なログインとパスワード。その後、彼はアクセスできます。 私たちの場合、成功した承認
Loginzaを介して-これは一種のログインおよびパスワード入力ですが、まだ承認されていません。
したがって、データベースには2つのテーブルがあります。
1.ユーザー(フィールド:user_id、ニックネーム、パスワード、電子メール)
2. loginza(フィールド:ID、ID、プロバイダー、ニックネーム、メール、ステータス、user_id)
サイトのユーザーは最初のテーブルに保存され、サイトの承認は次のデータに従って正確に行われます
このテーブル。 この表のフィールドでは、すべてが明確だと思います。
2番目のテーブルにはユーザーも格納されます。 しかし、これらは正常にログインしたユーザーです
Loginzu。
identity-loginzaを渡します。 プロバイダーからの一意のキーのようなもの。
プロバイダー-loginzaを渡します。 これは、ユーザーが許可されるサービスです(連絡先、Facebook、
ヤンデックスなど)
ニックネーム、メール-Loginzaを裏切る。 承認プロバイダーが返したニックネーム(メール)。 5月
何であれ。 またはまったくありません。
ステータス-新しいユーザー/古いユーザー
user_id-usersテーブルのユーザーID
これは最小限のテーブルのセットです。
認証スクリプト自体
ログインページ
最初の段階で受け取ったHTMLコードはログインフォームです。 ページに配置
認可。
受信したコードでは、成功した場合にユーザーが移動するアドレスを指定する必要があります
認可。 このスクリプトは認証データを受け取ります!
loginza.ru/api/widget?overlay=loginza&token_url= yoursaytru / auth.php
http://またはhttps://で完全なURLを指定する必要があります。PHPで事前にエンコードされています
urlencode()関数。
応答を受信し、ユーザーを登録および承認するためのスクリプト
このスクリプトは、ログインからの応答を認識し、ユーザーをさらに誘導する必要があります。
スクリプトの内容は次のようなものです。
$loginzaid='ID'; //ID
.
$loginzakey='HASH'; //
.
$token=$_POST['token']; // .
$sig=md5($token.$loginzakey); // .
$kk="http://loginza.ru/api/authinfo?token=".$token."&id=".$loginzaid."&sig=".$sig.""; //
url
$b=file_get_contents($kk); //
$authresult=json_decode($b,true); // PHP
$ authresult配列で、承認されたユーザーに関するデータ。
この例では、タスクを多少簡略化し、ニックネームとメールが送信されると仮定します
承認プロバイダーと、ユーザーテーブルにそのようなユーザーがいるユーザーはまだありません
存在します。 実際には-これを確認する必要があり、データがない場合、または重複している場合
ユーザーデータベース内の既存のログイン-ユーザーに説明を要求します。 しかし、それは違います
物語。
続けて
新しいユーザー
取得したプロバイダーのloginzaテーブルにエントリがあるかどうかを確認し、
アイデンティティ
$res=mysql_query("SELECT * FROM $tbl_l WHERE identity='$authresult[identity]' AND
provider='$authresult[provider]'");
そのようなレコードがない場合は、loginzaテーブルにユーザーを入力します
if(mysql_num_rows($res)==0)
{
mysql_query("INSERT INTO loginza (
`identity`,
`provider`,
`nickname`,
`email`,
`status`,
`soc_user_id`
)
VALUES
(
'$authresult[identity]',
'$authresult[provider]',
'$authresult[nickname]',
'$authresult[email]',
0,
0
)
") ;
}
確かにこのユーザーはそうです。
このようなIDとプロバイダーを持つユーザーについて読みます(readいですが、簡単にするために
ナレーション)。
$res=mysql_query("SELECT * FROM $tbl_l WHERE identity='$authresult[identity]' AND
provider='$authresult[provider]'");
$loginza=mysql_fetch_assoc($res);
これが彼の最初のエントリと回答の場合。 usersテーブルにまだ登録されていない-登録する
そこで、loginzaテーブル情報を更新します。
if($loginza['status']==0)
{
$pwd=md5(' '); // ( ) MD5-
mysql_query("INSERT INTO users (nickname, password, email) VALUES ('$loginza[nickname]',
'$pwd', '$loginza[email]' )"); //
$iid=mysql_insert_id(); // ID . .
// loginza
mysql_query("UPDATE loginza SET status=1, user_id=$iid WHERE id=$loginza[id]"); //
=1 users
}
それだけです! これで、このユーザーの許可とLoginzaの間の接続が確立されました。
usersテーブルでこのユーザーを承認し、サイトに配置するだけです。
if($loginza['status']==1)
{
Someauthorization($iid); //,
}
既存のユーザー。 再ログイン。
このユーザーが(次回)再度ログインするとどうなりますか? 瞬間に戻る
ユーザーの最初の入力にチェックを割り当てたとき:
if($loginza['status']==0)
などなど。
ユーザーが既にサイトに正常にログインしている場合、彼のloginzaテーブルのステータスは1です。
このloginzaエントリのuser_idを知って、承認のために送信する必要があります! そしてそれだけです!
if($loginza['status']==1)
{
Someauthorization($loginza['user_id']); //,
}
セキュリティについて一言
私の意見では、Loginzaは十分なセキュリティを提供し、すべてが重要です
ジャムは-ある種の隠蔽された。 個人的には、潜在的な脆弱性は見当たりません。
私が引用したコードに関しては、これは単なる例であり、イラストであり、既製のコードではありません。 ない
それが存在する形式で私が与えたコードを使用する価値があります。