ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

nuxt全栈仿美团官网07——登录

2019-09-14 18:43:09  阅读:355  来源: 互联网

标签:07 登录 ctx 全栈 done user passport 仿美团 参数


平时在有道云上做笔记,直接发到这里格式全乱了,有空整理,大家也可查看有道云链接:http://note.youdao.com/noteshare?id=89555d3b2cd4535a4221e0bfb0e14f60&sub=067B991951B34CE2AA9652B93889306C

用户登录流程:

 

  1. 点击登录按钮(自行验证),将用户名编码密码加密后发送到后台接口

this.$axios.post('users/signin',{ username:encodeURIComponent(this.username), password:cryptoJs.MD5(this.password).toString() }).then()

  1. 接口配置

import Passport from './utils/passport'

  1. 后台取出请求值后,返回一个passport鉴权验证方法,其具体验证策略的配置放在后面说。这个方法内通过判断err和user的的状态确认是否通过验证,通过后执行ctx.login(user)把登录信息写入session。

// 导入配置的策略 import Passport from './utils/passport' …… // 这里的return很重要,忘了写的话接口就不能返回任何东西 // 第1个参数是函数,其参数中的err是错误信息,验证通过时为null, // 第2个参数user在验证通过时返回被查询到的对象,而验证不通过时为false, // 第3个参数info是passport策略配置中done()的第三个参数,为自定义的信息 // 第4个参数暂不清楚 return Passport.authenticate('local',(err,user,info,status)=>{ console.log('authenticate:',err,user,info,status) if(err){ ctx.body={ code:-1, msg:err } }else{ if(user){ ctx.body={ code:0, msg:'登陆成功!' } // 这里写入session的参数user,对应passport策略配置中序列化和及反序列化函数的第一个参数。 return ctx.login(user) }else{ ctx.body={ code:1, msg:info } } } })(ctx,next)

  1. 必须在系统中(index.js)使用passport

import passport from './interface/utils/passport' …… // 在start之前调用这两行 app.use(passport.initialize()) app.use(passport.session())

  1. 登录成功后,前台跳转到首页,否则显示错误信息。

.then(({status,data})=>{ if(status===200){ if(data&&data.code===0){ location.href='/' }else{ this.error = data.msg } } })

 

passport策略配置

参考koa-passport学习笔记:https://www.jianshu.com/p/622561ec7be2

// 进行用户权鉴
import passport from 'koa-passport'
// 使用本地策略,其他策略还有github登录,微信登录等等
import LocalStrategy from 'passport-local'
import UserModel from  '../../dbs/models/user'
// 定义登录策略的使用逻辑
 passport.use(new LocalStrategy(async (username,password,done)=>{
   const where =  {username};
   const result = await UserModel.findOne(where);
   // console.log('result',result)
   if(result){
     if(result.password === password){
       done(null,result)
     }else{
       done(null,false,'密码不正确')
     }
   }else{
     done(null,false,'用户名不存在')
   }
 }))

// 序列化函数:在ctx.login(user)时调用,其参数会传给serializeUser作为第一个参数,
// 并在session中添加用户登录状态
passport.serializeUser((user,done) => {
  done(null,user)
})

// 反序列化函数,自动解析用户请求中session中的信息,
// 第一个参数就是serializeUser存入session的数据,
// 如果在登录状态,则把这条数据添加在ctx.state.user中。
passport.deserializeUser((user,done)=>{
  return done(null,user)
})

export default passport;

 

标签:07,登录,ctx,全栈,done,user,passport,仿美团,参数
来源: https://blog.csdn.net/daoke_li/article/details/100832414

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有