user.js 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  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 client_id = ctx.cookies.get('client_id');
  25. if(!redirect_uri){
  26. redirect_uri = ctx.origin+"/api/receiveIDToken";
  27. }
  28. if(!client_id){
  29. client_id = 'seec-portal';
  30. }
  31. let data = {
  32. iss : 'p.seecoder.cn',
  33. sub: user.phone,
  34. aud: client_id,
  35. auth_time: Math.floor(new Date().getTime() / 1000),
  36. iat: Math.floor(new Date().getTime() / 1000),
  37. exp: Math.floor(new Date().getTime() / 1000 + 24 * 60 * 60),
  38. user_info: {phone: user.phone, email: user.email, id: user.id, name: user.name ,role: user.role}
  39. };
  40. const token = jwt.sign(data, secret.sign);
  41. //ctx.redirect(redirect_uri + "?id_token=" + token);
  42. ctx.body = Response.success({token: token, name: user.name, path:redirect_uri});
  43. }
  44. } else {
  45. ctx.body = Response.failed('此账号不存在');
  46. }
  47. }
  48. /**
  49. * 注册
  50. * @param ctx
  51. * @returns {Promise.<void>}
  52. */
  53. static async register(ctx) {
  54. const data = ctx.request.body;
  55. if(!ctx.session.verification_phone || !ctx.session.verification_code){
  56. ctx.body = Response.failed('请重新获取验证码');
  57. }else if(ctx.session.verification_code !== data.identifyCode || ctx.session.verification_phone !== data.phone){
  58. ctx.body = Response.failed('验证码错误');
  59. }else{
  60. const hashPassword = bcrypt.hashSync(data.password, 10);
  61. const result = await userModel.create(data.name, hashPassword, data.phone, data.email);
  62. ctx.session.verification_phone = undefined;
  63. ctx.session.verification_code = undefined;
  64. if (result.code === 0) {
  65. ctx.body = Response.success({name: result.data.name});
  66. } else if(result.code === -2){
  67. ctx.body = Response.failed('此手机号已注册');
  68. } else if(result.code === -1){
  69. ctx.body = Response.failed('此用户名已使用');
  70. }
  71. }
  72. }
  73. static async sendMessage(ctx){
  74. let {phone} = ctx.request.body;
  75. let code = "";
  76. for(let i = 0; i < 6; i++){
  77. code+=Math.floor(Math.random()*10)
  78. }
  79. let params = {
  80. PhoneNumbers: phone,
  81. SignName: 'seeccoder',
  82. TemplateCode: 'SMS_181555598',
  83. TemplateParam: '{"code":"' + code + '"}'
  84. };
  85. let options = {
  86. timeout: 3000, // default 3000 ms
  87. formatAction: true, // default true, format the action to Action
  88. formatParams: true, // default true, format the parameter name to first letter upper case
  89. method: 'GET', // set the http method, default is GET
  90. headers: {}, // set the http request headers
  91. };
  92. try{
  93. const result = await aliClient.request('SendSms', params);
  94. console.log("result:", result);
  95. if(result.Code === "OK"){
  96. ctx.session.maxAge = 5 * 60 * 1000;
  97. ctx.session.verification_code = code;
  98. ctx.session.verification_phone = phone;
  99. console.log('verification_code:', ctx.session.verification_code);
  100. ctx.body = Response.success({message: '发送成功'});
  101. }else{
  102. console.log("error:", result.message);
  103. ctx.body = Response.failed("发送失败,请重试");
  104. }
  105. }catch (e) {
  106. console.log(e);
  107. ctx.body = Response.failed("发送失败,请重试");
  108. }
  109. }
  110. static async getInfo(ctx) {
  111. const data = ctx.request.body;
  112. const user = await userModel.findByUid(data.uid);
  113. if (user) {
  114. ctx.body = Response.success({phone: user.phone, email: user.email, id: user.id, name: user.name, signature: user.signature});
  115. } else {
  116. ctx.body = Response.failed('用户信息获取失败');
  117. }
  118. }
  119. }
  120. module.exports = UserController;