Home Top About Help Login Search

ユーザ登録->メールが飛んでくる->クリックすると本登録

ID: 14
creation date: 2009/10/01 11:38
modification date: 2009/10/01 11:38
owner: naoto5959
tags: php

よくあるアレを作ります。

テーブル準備

CakePHPで使うのでそれっぽい命名規則で作ります。statusはt:temporary, r:registered, f:frozenとか。

メンバーテーブル

CREATE TABLE `members` (
  `id` int(11) unsigned NOT NULL auto_increment,
  `mail_address` varchar(255) NOT NULL,
  `password` varchar(64) NOT NULL,
  `nickname` varchar(32) collate utf8_unicode_ci NOT NULL,
  `status` enum('t', 'r', 'f') default 't',
  `created` datetime NOT NULL,
  `modified` datetime NOT NULL,
  PRIMARY KEY(`id`)
) ENGINE=InnoDB CHARSET=utf8 COLLATE=utf8_unicode_ci;

keyを作る

大雑把な流れとして以下を考えました。

  1. membersにレコードをINSERT
  2. members.idからkeyを作成
  3. idとkeyを含んだメールを会員へ送信。

secret_hash_keyの部分は適当に変えつつ

$key = hash_hmac("sha256", $id, 'secret_hash_key');

とか

$key = hash_hmac("sha512", $id, 'secret_hash_key');

とかですかね。

keyを認証

  • id: 123
  • key: de461a3115008022010913e6d7f73dad113a40a057d49816a42678f897163185

とかだったら、

http://exampl.com/register/123/de461a3115008022010913e6d7f73dad113a40a057d49816a42678f897163185

みたいなアドレスをクリックさせて

$key = hash_hmac("sha256", $id, 'secret_hash_key');

の結果とパラメータのkeyを照合させて登録ですかね。その際に、members.createdから5分以内とか30以内とか、なんかそういう処理を入れつつmembers.status='r'にするみたいな感じにしてみようかと思います。

適当に考えたけど、とりあえずメモ書き。

0 comments
: