user.js 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  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 user = await userModel.create(data.name, hashPassword, data.phone, data.email);
  62. ctx.session.verification_phone = undefined;
  63. ctx.session.verification_code = undefined;
  64. if (user) {
  65. ctx.body = Response.success({name: user.name});
  66. } else {
  67. ctx.body = Response.failed('此手机号已注册');
  68. }
  69. }
  70. }
  71. static async sendMessage(ctx){
  72. let {phone} = ctx.request.body;
  73. let code = "";
  74. for(let i = 0; i < 6; i++){
  75. code+=Math.floor(Math.random()*10)
  76. }
  77. let params = {
  78. PhoneNumbers: phone,
  79. SignName: 'seeccoder',
  80. TemplateCode: 'SMS_181555598',
  81. TemplateParam: '{"code":"' + code + '"}'
  82. };
  83. let options = {
  84. timeout: 3000, // default 3000 ms
  85. formatAction: true, // default true, format the action to Action
  86. formatParams: true, // default true, format the parameter name to first letter upper case
  87. method: 'GET', // set the http method, default is GET
  88. headers: {}, // set the http request headers
  89. };
  90. try{
  91. const result = await aliClient.request('SendSms', params);
  92. console.log("result:", result);
  93. if(result.Code === "OK"){
  94. ctx.session.verification_code = code;
  95. ctx.session.verification_phone = phone;
  96. console.log('verification_code:', ctx.session.verification_code);
  97. ctx.body = Response.success({message: '发送成功'});
  98. }else{
  99. console.log("error:", result.message);
  100. ctx.body = Response.failed("发送失败,请重试");
  101. }
  102. }catch (e) {
  103. console.log(e);
  104. ctx.body = Response.failed("发送失败,请重试");
  105. }
  106. }
  107. }
  108. module.exports = UserController;