Laravist 半月谈(5.31 - 6.13) 好久没看群聊天的方方

本期应该要丢失掉很多聊天记录,因为方方我这阵子很忙,家里的电脑压根没开过qq,要是遗漏很多我只能表示没办法.

[网站分享]

(Tomoe)

https://github.com/davejamesmiller/laravel-breadcrumbs 面包屑

https://googlecreativelab.github.io/anypixel/

http://works.ioa.tw/browser_console_qrcode/  在瀏覽器 Console 上畫 QR Code!

https://hahow.in/ 界面好看的线上课程

(安正超)

http://overtrue.me/bootstrap-theme-slim/  

(欢欢)

https://github.com/pandao/planeui  

(Jellybool)

https://cn.udacity.com/  优达学城

(Abraham)

https://github.com/FriendsOfPHP/PHP-CS-Fixer  强制PHP格式

http://www.zcfy.cc/article/396

http://libs.useso.com/

(茄子)

http://mp.weixin.qq.com/s?__biz=MzA4MjEyNTA5Mw==&mid=2652563725&idx=1&sn=2d8714f18f54b6891ea71dd07d6f0397&scene=23&srcid=06047QY6jzDIKrhNuDBA1u20#rd  玩转Stack Overflow


(Starriv) 

http://videojj.com/


(jjplay)

http://mint-ui.github.io


(Lonquan)

http://www.ectouch.cn/ 一个所谓的开源电商

(Vikin)

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript  文档



http://www.maatwebsite.nl/laravel-excel/docs/export

[业务疑问]

1) (茄子)

问个编码规范的问题。  我的一个model有个属性叫做status,存放的是英文代码,我希望为他做一个getter,取出转换后的中文含义。  你们怎么取名?  我现在是用laravel的getter 写成 getStatusDescriptionAttribute,getXXXAtrribute 在laravel里可以这样用  $m->XXXX.

我主要是想取名是偷懒点,定个规则,比如 status 是代码, 后面加description的 status_description 统一都是中文释义

答: (littlehz) 先想中文,加个 自然语言、人类语言、显示名称、描述信息这样的都好理解,然后再想这个中文对应的英文,从里面选优雅点、没有歧义的

2) (Littlehz)

laravel的cron,怎么配置成在某台服务器定时执行某些操作,某些服务器执行另外的几个,而剩下的服务器没有定时任务?同一个项目,有好多机器,不同机器有不同的计划任务。之前是写crontab,每台机器配不一样的,既然用laravel了,就打算用laravel自己的计划任务调度嘛.我就是想问怎么识别机器的方式好?php代码肯定是一样的,只有hostname、ip不一样咯,生产环境的所有机器env也是一样的。

答: (安正超) 在代码里完成这个任务注册,识别机器.机器名,或者在机器的ENV文件里定义名称.你不是有一个注册计划任务的地方嘛.根据机器不同来决定注册哪些任务

3) (晓)

我用dingo+oauth2.0做验证,在header里传Authorization参数时,服务器获取不到参数(  Request::header('Authorization')  ),但本地是可以的,后来我试了一下自定义哪的参数是可以获取到的( Request::header('sAuthorization')  是可以的),有谁知道这是哪里被拦截了?

答: (Jellybool) https://github.com/tymondesigns/jwt-auth/wiki/Authentication

4) (徐先森)

我想的就是你和我说话我能看到,就是 前台把数据提交到一个公共的频道 然后 index.js 后台把他发给带用户id的频道  然后前台在接受带 用户id频道id 的数据 然后再发送ajax 然后laravel写入数据到数据库 这样就保存了消息记录 前台也实时显示了 数据.

答: (Littlehz)

你的逻辑没错。但是我问你一个问题,不知道你考虑了没有。你前台用js监听了一个 websocket连接,你后台的socket.js,有没有判断用户的 cookie/session?

如果一个伪造的用户过来,不在服务器上的 socket.js 里判断 session ,这个用户能不能使用这个 频道ID?

鉴别用户的身份,判断用户能不能用这个功能,这就叫鉴权。

这是简单点的,私聊。频道id就是用户id,频道id与session中的用户id相同,那就有权限。

往复杂点的鉴权,如果是群聊,频道id是群组id,只有群组的成员用户,才有权限使用这个websocket频道。那你的代码里是不是会很多,要不然在 socket.js 里实现一套ACL或者RBAC逻辑?

看你的sever.js,你的websocket应该是直连 node 服务器的,与php没有关系。


5) (茄子) 承接上面的问题

标准的鉴权方式是怎样? server.js  或者  lua 再调用一次php的鉴权api么?怎么在server.js 里判断?

答: 

(Lonquan)

session_id + user id ,php 的 session, 直接扔到 redis 去

(Littlehz)

和下载文件类似,php 鉴权完再丢给 server.js 或者 nginx lua,看你用哪种实现的websocket。

websocket的location设置为 internal;这样鉴权逻辑就不用写两套,就是websocket不直接和 server.js 或者 nginx lua 通信,从php这边过一手. 利用 nginx 特有的 X-Accel-Redirect 这个 header

假定nginx 的配置

server {

            location /1 {

                   internal;

            }

            location /2 {

                   fastcgi_pass xxxx

            }

}

正常情况下只能访问 /2 这个 uri

php鉴权完了,输出

header('X-Accel-Redirect: /1');

exit();

那就能让这个http连接,内部跳转,挂起到 /1 这个 location.

网上搜索到的方法,大多数是说 X-Accel-Redirect 用于下载文件。其实并不是这个意思,是让 nginx 跳到另外一个 location。至于 location /1 里面是下载文件也好,还是 proxy 反向代理也好,还是连接 redis 也好,还是用 lua 脚本干别的都可以。


[小技巧]

1) (Littlehz) php-fpm进程用户,不要和web目录的php文件属组是同一个组的用户

2) (安正超) 一个开源软件使用的时候排错路线: 我的用法是否正确了? -> 我是否漏掉了哪个部分? -> 看看网友的反馈(issue找找)有没有同样的问题

3) 获取文件后缀名 getClientOriginalExtension


[见解]

1) 如何学习?

(茄子)

按自己的想法写一段代码,调试一下,再写一段,再调试,是在浪费自己时间。先把文档精读一遍,每个sample code都动手实现一遍看下效果。这是最基本的要求。

(安正超)

很多人都打着“项目着急没时间看文档,先写吧,一边写一边看,遇到问题再查.这种做法只会让你的项目进度更慢,绝对不会更快,这玩意儿与打仗很像啊.你得先了解对方军情才能去搞.边打边招人?边生产枪支?知已知彼才能走得顺,所以你的做法是不科学的.还会经常自己打击自己. “为什么?为什么?大家都用得好好的,我一用就这么多问题?是我笨么?还是我不适合做这行。。”

用一个东西之前,花时间去把文档过一遍(知识点放到脑袋里),起码一点,出一个问题的时候我知道这是哪个部分的内容,回头再看的时候速度就快很多.而不是扔一条消息到群里,吃完饭回来还没有人回答,那就 SB 了,老板在身后站着看你解决的时候怎么办.

就是各种补充周末没有吸收到的讯息

(Littlehz)

先思考再动手写.

我大概去年12月开始调研确定新业务用 laravel 框架,然后开始学,大概看了一个星期手册。开始看教主的视屏。当然有别的事情,每周留个laravel的时间应该不到2个小时。然后在这个群里,经常看你们问问题,看别人回答问题,反正看到的我都记得怎么处理。到了5月中旬,才开始写第一行laravel的应用代码。但我现在写 laravel 的应用,基本上不用查什么手册,也基本上不用问问题。

任何人都不会说问题简单而不答,任何人也不会说因为基础差而认为不适合做,只是发现你的学习方法、思考方式不对,在帮助你提高自己。谁都是从不会到会的。

2) (Tomoe) Javascript 

應該說分原始類型和對象(引用)類型,Number String Bool Null Undefined 都是原始類型,其他都是對象 Function Array 等等,在底層處理時,原始類型是直接存入數據,而Object Function Array是存入指針

3) (Littlehz) 如何开发下载功能

如果不需要支持多服务器,直接在下载地址nginx rewrite到uploads目录,不要这么复杂

如果不需要鉴权用户身份,谁都可以下载,那直接nginx配个域名直接到uploads目录。如果需要鉴权,那就php鉴权完了,输出一个header头"内部跳转"到nginx的其他location就好。完全不需要php读文件内容再输出。

4) (Littlehz) 

我一直是这么觉得,凡是大一点的系统,一定是要有独立的ID生成器。生成器可以传ID空间这样的参数,在同一个ID空间里自增。生成的ID应当是逐渐增大的,尽量连续,保证绝对不重复,不回退。


[名词解释]

Jwt的作用: jwt做的事儿与你的账户系统没有关系,它只是负责把你的敏感信息加密扔到客户端,客户端再拿着那个回来的时候它负责给你解开

geoip

snagit  截屏

licecap 专门录gif

你可能感兴趣的:(Laravist 半月谈(5.31 - 6.13) 好久没看群聊天的方方)