jQuery 发起 AJAX 请求如何进行 Authentication

2015-12-02 14:52:33 +08:00
 yhf

后端已经写好了 API ,例如删除 id 为 1 的订单: DELETE /order/1

这个 API 是需要 authentication 的,如果用 curl 的话,大致如:curl -u username:password -X DELETE /order/1 。然后后端会验证该订单是否由认证用户创建,如果是,则可以删除。

现在前端页面发起一个 AJAX 请求,可是我不知道该如何进行验证。显然不能把用户名和密码带上吧,而且前端页面也没有用户名和密码啊... 这种情况的 best pratice 是什么?(后端是 Flask)

3630 次点击
所在节点    Python
22 条回复
frozenshadow
2015-12-02 14:59:25 +08:00
请求的话,不是有 session 么?
ryanking8215
2015-12-02 15:13:30 +08:00
curl -u username:password -X DELETE /order/1
默认使用 basic authentication.

请求头里造个头就好了
FrankFang128
2015-12-02 15:19:15 +08:00
setHeaders?
domty
2015-12-02 15:23:38 +08:00
jquery+ajax 不是 b/s 架构吗?
b/s 架构有 cookie 和 session 哪,认证的时候查 session 登录状态不就行了吗
unknownservice
2015-12-02 15:25:25 +08:00
鉴权不是后端考虑的事吗,有 session 还不够?
Pastsong
2015-12-02 15:28:11 +08:00
之前也想过这个问题,似乎用加 token 的方式也可以
demo
2015-12-02 15:29:50 +08:00
请不要单独的使用前端进行权限验证
500miles
2015-12-02 15:32:46 +08:00
你不用管 直接发起 ajax 请求就可以了..

请求会自动带上 cookie 信息.

锅就顺利到了后端 = = ,
996635
2015-12-02 15:34:29 +08:00
JWT
sarices
2015-12-02 15:36:08 +08:00
直接请求的话,先登录再发起就可以啦,有 session 做验证
sarices
2015-12-02 15:37:01 +08:00
每次带账号密码请求比较麻烦,每次都要数据库比对账号密码是否正确,加重后端压力
CosWind
2015-12-02 15:44:36 +08:00
楼上好多的貌似理解错了,后端设计 api 的规范是遵循 restful 的,认证使用了 Basic Authorization
http://stackoverflow.com/questions/5507234/how-to-use-basic-auth-and-jquery-and-ajax
haozhang
2015-12-02 15:46:21 +08:00
session 验证啊, ajax 发起的 http 请求会把 cookie 带上的。
daysv
2015-12-02 15:49:26 +08:00
JWT 比较好
codeyung
2015-12-02 15:55:39 +08:00
不要前端验证 服务器有 session 和 token 都可以搞
CosWind
2015-12-02 15:57:49 +08:00
仔细想想,不对呀, bs 的采用这种方式,难道是内部系统;好像就只看到三方平台会这么设计接口
ccbikai
2015-12-02 15:58:38 +08:00
这个认证是靠 header 的 Authorization 字段完成的.
ccbikai
2015-12-02 16:00:40 +08:00
所以往 header 加 Authorization 字段, 值是 Basic base64(username:password).

base64(username:password) 是个函数,你应该看的懂

jQuery.ajax 怎么添加 header ,自己看下文档
ccbikai
2015-12-02 16:04:46 +08:00
$.ajax({
username: 'zhang',
password: 'san'
});

jQuery 竟然支持直接传 http 认证方法



----

看了下楼主需要 best pratice , 现在 http basic 认证肯定不行,换认证方式吧
xujif
2015-12-02 16:06:49 +08:00
如果是纯 restful 接口,在 bs 里使用时,建议增加一层,校验 session 。另造一个轮子 token 放在前端维护实在不是一个好主意,除非你的页面是 mvvm 纯前端。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/240574

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX