user.js 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. const userModel = require('../model/user');
  2. const jwt = require('jsonwebtoken');
  3. const bcrypt = require('bcrypt');
  4. const secret = require('../config/secret');
  5. const Response = require('../util/response');
  6. const aliClient = require('../util/aliClient')
  7. class UserController {
  8. /**
  9. * 登录
  10. * @param ctx
  11. * @returns {Promise.<void>}
  12. */
  13. static async login(ctx) {
  14. const data = ctx.request.body;
  15. const user = await userModel.findByPhone(data.phone)
  16. if (user) {
  17. const confirmRes = bcrypt.compareSync(data.password, user.password);
  18. if(!confirmRes){
  19. ctx.body = Response.failed('密码错误,请重试')
  20. }else{
  21. // console.log('ctx',ctx);
  22. // console.log('ctx.cookies.redirect_uri',ctx.cookies.get('redirect_uri'));
  23. let redirect_uri = ctx.cookies.get('redirect_uri');
  24. let data = {
  25. iss : 'p.seecoder.cn',
  26. sub: encodeURIComponent(user.id + "&" + user.name + "&" + user.phone),
  27. aud: ctx.cookies.get('client_id'),
  28. auth_time: Math.floor(new Date().getTime() / 1000),
  29. iat: Math.floor(new Date().getTime() / 1000),
  30. exp: Math.floor(new Date().getTime() / 1000 + 24 * 60 * 60),
  31. };
  32. const token = jwt.sign(data, secret.sign);
  33. //ctx.redirect(redirect_uri + "?id_token=" + token);
  34. ctx.body = Response.success({token: token, name: user.name, path:redirect_uri});
  35. }
  36. } else {
  37. ctx.body = Response.failed('此账号不存在');
  38. }
  39. }
  40. /**
  41. * 注册
  42. * @param ctx
  43. * @returns {Promise.<void>}
  44. */
  45. static async register(ctx) {
  46. const data = ctx.request.body;
  47. if(!ctx.session.verification_phone || !ctx.session.verification_code){
  48. ctx.body = Response.failed('请重新获取验证码');
  49. }else if(ctx.session.verification_code !== data.identifyCode || ctx.session.verification_phone !== data.phone){
  50. ctx.body = Response.failed('验证码错误');
  51. }else{
  52. const hashPassword = bcrypt.hashSync(data.password, 10);
  53. const user = await userModel.create(data.name, hashPassword, data.phone);
  54. ctx.session.verification_phone = undefined;
  55. ctx.session.verification_code = undefined;
  56. if (user) {
  57. ctx.body = Response.success({name: user.name});
  58. } else {
  59. ctx.body = Response.failed('此手机号已注册');
  60. }
  61. }
  62. }
  63. static async sendMessage(ctx){
  64. let {phone} = ctx.request.body;
  65. let code = "";
  66. for(let i = 0; i < 6; i++){
  67. code+=Math.floor(Math.random()*10)
  68. }
  69. let params = {
  70. PhoneNumbers: phone,
  71. SignName: 'seeccoder',
  72. TemplateCode: 'SMS_181555598',
  73. TemplateParam: '{"code":"' + code + '"}'
  74. };
  75. let options = {
  76. timeout: 3000, // default 3000 ms
  77. formatAction: true, // default true, format the action to Action
  78. formatParams: true, // default true, format the parameter name to first letter upper case
  79. method: 'GET', // set the http method, default is GET
  80. headers: {}, // set the http request headers
  81. };
  82. try{
  83. const result = await aliClient.request('SendSms', params);
  84. console.log("result:", result);
  85. if(result.Code === "OK"){
  86. ctx.session.verification_code = code;
  87. ctx.session.verification_phone = phone;
  88. console.log('verification_code:', ctx.session.verification_code );
  89. }else{
  90. console.log("error:", message);
  91. }
  92. }catch (e) {
  93. console.log(e);
  94. }
  95. }
  96. }
  97. module.exports = UserController;