Redisはメール検証コードを実現する
2713 ワード
現在、appログインには認証コードログイン機能があり、少なくとも2つのインタフェースが含まれています.認証コードの取得とログインです.
バックグラウンドサービスは、検証コード、アカウントとその検証コードの対応関係をキャッシュし、時間オーバー(一般的に60秒)を設定する必要がある.この検証コードは、記憶するためにミドルウェアが必要です.RedisはKeyValue方式でデータを格納し、タイムアウト自動削除機能も提供し、メール認証コードのニーズに適しています.
参考:Redis実装ミドルウェア
一、「認証コードの取得」ボタンのサンプルコードをクリックする:
キーコード:jedis.setex(accountid+"_smslogin",60,pwd)は、60秒を超えると自動的にキー値が削除されることを示す.
6ビットの乱数を返す検証コード関数を生成します.
二、ログインインタフェースの例:
ログインインタフェースは、アクセス検証コードパラメータとミドルウェアredisにキャッシュされた検証コードを比較し、一般的にappはパスワードフィールドを転送する際に暗号化されます.したがって、サービス側は、パスワードの明文を復号または暗号化することができる.
Redisはタイムアウト自動キー値削除機能を提供し、複数のtomcatノードで同じredisにアクセスできるため、Redisで検証コード機能を実現する.
PS:Redisは分散ロック機能も提供しており、現在インターネット会社が使用している主流のミドルウェアです.
バックグラウンドサービスは、検証コード、アカウントとその検証コードの対応関係をキャッシュし、時間オーバー(一般的に60秒)を設定する必要がある.この検証コードは、記憶するためにミドルウェアが必要です.RedisはKeyValue方式でデータを格納し、タイムアウト自動削除機能も提供し、メール認証コードのニーズに適しています.
参考:Redis実装ミドルウェア
一、「認証コードの取得」ボタンのサンプルコードをクリックする:
@RequestMapping("/getloginsms")
@ResponseBody
public DemoEntity getSmsCode(@RequestParam(value = "accountid") String accountid) {
Jedis jedis = RedisProvider.getJedis();
DemoEntity entity = new DemoEntity();
String pwd = null;
//1.
boolean isExist = jedis.exists(accountid + "_smslogin");
if (isExist) {
pwd = jedis.get(accountid + "_smslogin"); // redis
//
return entity;
} else {
// ,
pwd = TestRedis.getRandom();
jedis.setex(accountid + "_smslogin", 60, pwd); //
}
//
entity.setPwd(pwd);
return entity;
}
各アカウントは一意のkeyに対応し、redisのkey値を区別するために接頭辞または接尾辞を追加するには、この例では接尾辞_を追加するsmslogin. キーコード:jedis.setex(accountid+"_smslogin",60,pwd)は、60秒を超えると自動的にキー値が削除されることを示す.
6ビットの乱数を返す検証コード関数を生成します.
public static String getRandom() {
String num = "";
for (int i = 0 ; i < 6 ; i ++) {
num = num + String.valueOf((int) Math.floor(Math.random() * 9 + 1));
}
return num;
}
二、ログインインタフェースの例:
@RequestMapping("/loginsms")
@ResponseBody
public DemoEntity logingBySms(@RequestParam(value = "accountid") String accountid,
@RequestParam(value = "smscode") String code) {
Jedis jedis = RedisProvider.getJedis();
String pwd = null;
//1.
boolean isExist = jedis.exists(accountid + "_smslogin");
if (isExist) {
pwd = jedis.get(accountid + "_smslogin"); // redis
} else {
// ,
}
//2. code , pwd 。
.....
//3. OK
jedis.del(accountid + "_smslogin");
DemoEntity resp = new DemoEntity();
//
return resp;
}
ログインインタフェースは、アクセス検証コードパラメータとミドルウェアredisにキャッシュされた検証コードを比較し、一般的にappはパスワードフィールドを転送する際に暗号化されます.したがって、サービス側は、パスワードの明文を復号または暗号化することができる.
Redisはタイムアウト自動キー値削除機能を提供し、複数のtomcatノードで同じredisにアクセスできるため、Redisで検証コード機能を実現する.
PS:Redisは分散ロック機能も提供しており、現在インターネット会社が使用している主流のミドルウェアです.