2019-3-27lesson

Apr 25, 2019

connect-mongo 用户登录后杀死浏览器,用户还得重新登录 - bug 解决过程

表现为用户正常登录。cookie、session 被正常记录。把浏览器关闭又打开时,需要重新登录。

猜测:

  1. cookie 没有记录

不对,记录了。front 在SignInCookies.set('secret', userInfo)。每次打开时都是有的。

  1. session 没有记录

流程对的。cookieParser、expressSession、passport.initialize、passport.session、passport.serilizeUser、passport.deserializeUser

但是注意到mongo 的session 表里面,expires、originalMaxAge 等都为null,说明session 写进去了,但是设置session expire 方式不对:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
app.use(expressSession({
name:
secret
maxAge: expireTime
})

以上设置过期时间方法不对,可以使用下面两种方法之一:

[1] 全部永久统一设置
expressSession({
name:
secret:
cookie:
maxAge: expireTime //这是统一设置方式的正确方式
})
[2] 灵活设置session过期时间
用户确认登录后,使用req.session.cookie.expire = expireTime

以上正确的解决了session 设置过期问题。

然后接下来尝试登录操作。发现登录后,退出浏览器,重新打开浏览器并进入页面,发现又打开了登录页。

难道问题还在?首先排除之前已经成功解决了cookie session 设置问题;是backend 有问题还是frontend 有问题?

这时尝试使用浏览器打开某个没有界面的接口时,居然打开了,同时返回了用户的基本信息!说明后端的确没有问题,后端将cookie 认证过后的信息正确的返回了。

后端校验没有问题,那么该问题就可能由frontend产生,frontend自己验证,自己处理了该route?

尝试找了下源码,确实发现了其在route.beforeEach(SPA 第一次加载或者重刷新调用)方法中,自我检验了一番,但是却缺少验证信息,自己误判自己。

从上面分析得到,全栈工程需要先各自分析问题由来和可能出处。当都有问题时就会很难判别,这时可以从一些不正常的地方打开突破口,一个个解决后,才能知道靠近真相。

这也是我第一次跟着老大一起改第一个大bug。自己没能贡献太多帮助,测试过程方法不熟练、分析来由不清晰、尝试过程比较靠蒙。

多多努力啊,努力才是回报老大苦心栽培!!

U盘格式为Fat32 最多只能4G 左右内容

Mac 大文件总是复制不进U盘,是因为Fat32格式原因。但是格式为NTFS 格式时Mac 又识别不了。

解决:取github 下载NTFS X;或者Mac 里面的NTFS 操作软件即可识别并进项curd 操作。

同局域网传输文件方法

PC.A在相关文件夹使用Python 打开权限python -m SimpleHTTPServer 8000

意思是打开8000 端口。此时另一台打开浏览器,输入${PC.A.ip:8000}即可进入该文件夹。同时选取对应文件即可下载

terminal zsh 翻墙

vim ~/.zshrc # 修改terminal 源文件
1
2
alias proxy='export all_proxy=socks5://127.0.0.1:${port}' # port 一般为1080;查看:- 偏好设置 - 高级 - 本地Socks5监听端口
alias unproxy='unset all_proxy'
1
2
source ~/.zshrc
curl cip.cc # 显示了国内地址
1
2
proxy
curl cip.cc # 已翻墙的地址
unproxy # 关闭翻墙

参考

centos6增加Swap分区

1.检查swap大小和硬盘空间

free -m

2.添加交换文件

mkdir -p /opt/temp
# 增加内存为2G
dd if=/dev/zero of=/opt/temp/swap bs=1024 count=2048000

3.创建交换空间

mkswap -f /opt/temp/swap

4.启动新增加的2G交换空间

swapon /opt/temp/swap

5.修改/etc/fstab 使新加的2G交换空间在系统重新启动后自动生效

echo "/opt/temp/swap swap swap defaults 0 0" >>/etc/fstab

6.重新启动系统

reboot

参考

Dockerfile 容器不能连接另一个容器的端口

错误原因是自身错误,情况:我以前就是写127.0.0.1 连接本地mongo、redis,但是我忘了我以前使用的是docker-compose

我现在不想用docker-compose,操作是使用真实物理地址, 如192.168.1.2、server Ip,反正不能为127.0.0.1 即可。

这样即可成功,仅仅只是这个错误.

导致我一个大中午在:构建容器400多M、上传容器、运行-出错,反复。本地debug运行都是可以连接的。然后我本地使用容器,咦,果然连不上。

重新Certbot-auto

域名过期,重新搞了个免费的域名:gogal.ml 官网
控制台等会还要用到,需要填写certbot token

首先去certbot 官网,我选择centos6-nginx 于是是这里-直达

1
2
3
4
5
6
7
8
$cd ~/
$mkdir download && cd download
$wget https://dl.eff.org/certbot-auto
$sudo mv certbot-auto /usr/local/bin/certbot-auto
$sudo chown root /usr/local/bin/certbot-auto
$sudo chmod 0755 /usr/local/bin/certbot-auto

$pip install certbot-nginx

到这里需要先前去nginx.conf 填写对应443 的server_name。 比如:server_name www.gogal.ml gogal.ml;下面会用到

$/usr/local/bin/certbot-auto –server https://acme-v02.api.letsencrypt.org/directory –manual –preferred-challenges dns –installer nginx -d *.gogal.ml -d gogal.ml # gogal.ml 就是我的域名

前几句都可以直接忽略,yes or enter

直到出现这句:

1
2
3
4
5
6
7
8
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please deploy a DNS TXT record under the name
_acme-challenge.gogal.ml with the following value:

EfurJLgnrwahc7g_6k7odGVXp6sffOruJaDceBdiAmU

Before continuing, verify the record is deployed.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

这时将里面那个拷贝到freenom 控制台-managedns

Add Records

name 填 _ACME-CHALLENGE
Target 填 ${你自己得到的那个,比如EfurJLgnrwahc7g_6k7odGVXp6sffOruJaDceBdiAmU}

回到ssh 按下enter 键,之后还有几步都没那么关键了。

这时你用postman 可以测试,之前的都是可用的了。

这里提一点:一开始我碰到certbot 升级的问题

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Saving debug log to /var/log/letsencrypt/letsencrypt.log

How would you like to authenticate with the ACME CA?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: Nginx Web Server plugin (nginx)
2: Spin up a temporary webserver (standalone)
3: Place files in webroot directory (webroot)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate number [1-3] then [enter] (press 'c' to cancel): 1
Plugins selected: Authenticator nginx, Installer None
Obtaining a new certificate
Performing the following challenges:
http-01 challenge for gogal.ml
Client with the currently selected authenticator does not support any combination of challenges that will satisfy the CA. You may need to use an authenticator plugin that can do challenges over DNS.
Client with the currently selected authenticator does not support any combination of challenges that will satisfy the CA. You may need to use an authenticator plugin that can do challenges over DNS.

我就是直接前往官网,下载最新的certbot-auto 即解决了。

利用Vue 2.x Templates(Legacy) 脚手架搭建项目

Vue 官网

yarn global add @vue/cli-init

vue init webpack <my-project>

接下来就可以愉快的写了