于是我自己的提问箱就是 https://ask.[data deleted]!
源代码在这里 #/boxy ?(给大家表演如何用一个项目气死你写前端和 Rust 的朋友(x
回答是人工的,并不是人工智能?(不过感觉加上人工智障能的话似乎也蛮好玩诶!
然后因为是模仿 peing 或者 sarahah 那样的匿名的提问箱,所以这个截图里就差不多是后台了~既然说是匿名的话,那就是真匿名~除了记录了提问时间,IP 只用来做了速度限制,没扔数据库。Question 在 MongoDB 里的模型则是
{ "_id" : ObjectId("5e0a0ca0001cd1ea00876f2e"), "question" : "What's this?", "question_time" : NumberLong(1577716896), "answer" : "It's a question box!", "answer_time" : NumberLong(1577716906), "id" : NumberLong(0) }
箱子的 owner 登录之后,直接点击答案的部分就进入编辑 / 回答模式,然后也可以删除提问什么的~
代码里倒是 Web 和纯 API 方式都实现了~然后回答之后自动生成 Twitter 卡片什么的还没有做_(:3」∠)_
再从技术层面上来说的话,这个项目用 Rust 上的 Hyper 作为 HTTP 服务器,然后数据库使用了 MongoDB,考虑到是作为单一用户的提问箱,因此用户名和密码是需要写在 boxy.json
里的~当然放进数据库里的是密码加盐后再 HMAC + SHA512 过的
stored_password = HMACSHA512(password + password_salt, password_salt)
{ "_id" : ObjectId("5e09a250004b7da70096e3dc"), "user" : "ryza", "password" : "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }
Web 界面和后端做了分离,我自己写了一个简单的~因此就直接手写了,没有用到现在前端流行的 Vue 或者 Angular 之类的框架。访问后端的 API 也是直接用的 jQuery 的 AJAX 模块。
登录之后会返回一个 token
,包含了有效期,默认是 365 天,保存在了浏览器的 localStorage
里。登出的时候会自动清掉,但不是关闭页面 / 浏览器自动清除,所以在公用电脑上要记得登出~
那么下面是目前有的一些 API~ 以 http://localhost:5534
为例子!