captcha.js 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. 'use strict';
  2. /**
  3. * 验证码
  4. *
  5. * @author CaiAoLin
  6. * @date 2017/10/13
  7. * @version
  8. */
  9. const Geetest = require('gt3-sdk');
  10. class Captcha {
  11. /**
  12. * 构造函数
  13. *
  14. * @param {Object} app - egg中的全局变量app(用于获取配置)
  15. * @return {void}
  16. */
  17. constructor(app) {
  18. this.captcha = new Geetest({
  19. geetest_id: app.config.geetest.id,
  20. geetest_key: app.config.geetest.key,
  21. });
  22. }
  23. /**
  24. * 验证码注册
  25. *
  26. * @param {Object} ctx - egg中的全局变量context
  27. * @return {String} - 返回生成所需的json数据
  28. */
  29. async register(ctx) {
  30. let response = {
  31. success: 0,
  32. };
  33. try {
  34. const data = await this.captcha.register(null);
  35. ctx.session.fallback = !data.success;
  36. response = data;
  37. } catch (error) {
  38. response.success = 0;
  39. response.message = error;
  40. JSON.stringify(response);
  41. }
  42. return response;
  43. }
  44. /**
  45. * 验证码校验
  46. *
  47. * @param {Object} ctx - egg中的全局变量context
  48. * @return {Boolean} - 返回是否校验成功
  49. */
  50. async validate(ctx) {
  51. let result = false;
  52. const challenge = ctx.request.body.geetest_challenge;
  53. const validate = ctx.request.body.geetest_validate;
  54. const seccode = ctx.request.body.geetest_seccode;
  55. try {
  56. if (challenge === '' || validate === '' || seccode === '') {
  57. throw '参数错误';
  58. }
  59. const fallback = ctx.session.fallback;
  60. result = await this.captcha.validate(fallback, {
  61. geetest_challenge: challenge,
  62. geetest_validate: validate,
  63. geetest_seccode: seccode,
  64. });
  65. } catch (error) {
  66. result = false;
  67. }
  68. return result;
  69. }
  70. }
  71. module.exports = Captcha;