それでは、VKontakteから始めましょう。 サイトの接続ページに移動します。将来、接続サイトの設定がアプリケーション管理ページで利用できるようになります。そこで、当然、誰にも公開されないアプリケーションIDと秘密キーがわかります。
「VKontakteを介したログイン」ボタンがヘッドページに追加されることになっているページ
< script type ="text/javascript" src ="http://userapi.com/js/api/openapi.js?34" ></ script >
そして、アプリケーションを初期化します。
VK.init({apiId: __APP_ID___});
次に、ウィジェット呼び出しを通じてユーザーにボタンを表示する必要があります。 パラメーターとして、Authはウィジェットを表示する要素のID、アクセス試行後にリダイレクトされるページの幅とアドレスを受け取ります。
< div id ="vk_auth" ></ div >
< script type ="text/javascript" >
VK.Widgets.Auth( "vk_auth" , {width: "300px" , authUrl: '/vklogin.php?' });
</ script >
ユーザーに表示されるもの:
![](https://habrastorage.org/storage1/20bbbb49/afa44c97/de12c457/de6c5392.png)
「VKontakte経由でログイン」をクリックした後、ユーザーはvkontakte.ru/widget_auth.php?act=a_auth_user&app=__APP_ID__&hash=d2d47b3c85d1a091a8のフォームのページにスローし、次にAuthUrlパラメーターで指定したURLにスローします。 次のGETパラメーターを使用してスローします。
first_name(名)、hash(リクエストが実際に連絡先から来たかどうかを確認するために使用され、ハッカーVasyaは他の誰かのデータを使用してログインしようとしない)、last_name(姓)、photo(大きなアバター、119ピクセル幅)、photo_rec(小さなアバター、50x50 )、uid(ユーザーID)。 フィルタリング後、グローバルスコープに同じ名前で保存した後に私たちに届いたパラメーター 。
次に、スクリプトvklogin.phpを作成します。このスクリプトでは、受信データの正確性を確認し、ユーザーが既にデータベースに存在する場合はユーザーを承認するか、初めてアクセスしたユーザーの新しいアカウントを作成します。
if ($_REQUEST[ 'hash' ]==md5( '2445355' .$uid. '__SECRET_KEY__' )) {
// , ,
// vk-********
$result = mysql_query( "SELECT id, random, password FROM tracker_users WHERE username = 'vk-$uid'" );
setcookie( 'uid' , '' );
setcookie( 'pass' , '' );
if (mysql_num_rows($result)) {
// ,
$user = mysql_fetch_assoc($result);
mysql_query( "UPDATE tracker_users SET name = '$name' WHERE username = 'vk-$uid' LIMIT 1" );
setcookie( 'pass' ,md5($user[ 'random' ].$user[ 'password' ].$user[ 'random' ]));
setcookie( 'uid' ,$user[ 'id' ]);
} else {
//
$random = mt_rand(100000,999999);
$pwd = $uid . 'verysecretlonglongword-' ;
$pid=md5(uniqid(rand(), true ));
mysql_query( "INSERT INTO tracker_users
(username, name, password, random, id_level, email, style, language, flag, joined, lastconnect, pid, time_offset) VALUES
('vk-$uid', '$name', '" . md5($pwd) . "', $random, 3, '', 5, 7, 0, NOW(), NOW(),'$pid', '0')" );
// ,
setcookie( 'pass' ,md5($random.md5($pwd).$random));
setcookie( 'uid' ,mysql_insert_id());
}
header( "Location: /index.php" );
}
* This source code was highlighted with Source Code Highlighter .
Cookieで認証を行う必要があるサイトには、ユーザーIDとソルトおよびパスワードハッシュからのハッシュが保存されます。 もちろん、ソリューションは理想的ではありませんが、エンジン全体を完全に変更することは私の計画の一部ではありませんでした。 すでにユーザーがいる場合は、Cookieを作成して承認します。初めての場合は、データベースに追加します。 また、呼び出しごとに、ユーザーが名前を変更できるため、名前のデータを更新しますが、関連性が必要です。
さらに、この認証を使用する前に、フォームvk-(または使用するユーザー)のログインを持つユーザーがいないことを確認する必要があります。 また、フォームvk-のログインで使用されるエンジンの通常の登録による登録を禁止し、ソーシャルネットワークのユーザーがパスワードを変更したり、オプションで表示名のあるアバターを変更したりすることも禁止する必要があります。 登録ユーザーによる電子メールの使用が重要なサイトでは、これらのユーザーが電子メールを持っていないという事実にエンジンを精通させる必要もあります。
オプションで、サイト上のユーザー名の各出力の横に、ソーシャルネットワークを通じて許可されていることを個別に強調表示することができます。
![](https://habrastorage.org/storage1/2dffd0dd/e06c708f/2159b1bd/3f3eece2.png)
記事のレベルと主題がユーザーにとって興味深い場合は、mail.ru、facebook、twitterを続けます。
第二部。 Mail.ru