检查请求是来自移动还是网络

时间:2018-01-23 03:30:27

标签: node.js express passport.js passport-local

Passport是否有办法在进行身份验证时检查请求是来自移动应用还是网络应用?因为如果请求来自Web我想返回一个视图,否则返回一个json有效负载。

2 个答案:

答案 0 :(得分:3)

这是我的意见,你可以在请求标题中检查用户代理,它看起来像这样(来自windows):

  

user-agent:Mozilla / 5.0 (Windows NT 6.1; Win64; x64) AppleWebKit / 537.36(KHTML,与Gecko一样)Chrome / 63.0.3239.132 Safari / 537.36

这来自我的iPhone

  

User-Agent:Mozilla / 5.0 (iPhone; CPU iPhone OS 10_3,如Mac OS X) AppleWebKit / 602.1.50(KHTML,与Gecko一样)CriOS / 56.0.2924.75 Mobile / 14E5239e Safari / 602.1

这是Android

  

User-Agent:Mozilla / 5.0 (Linux; Android 5.0; SM-G900P Build / LRX21T) AppleWebKit / 537.36(KHTML,与Gecko一样)Chrome / 63.0.3239.132 Mobile Safari / 537.36

因此您可以从用户代理处理出来,该请求来自移动设备或个人计算机

答案 1 :(得分:0)

如果您有两个不同的客户期望不同的结果,那么您应该明确地发送不同的请求,而不是试图从一些不一定可靠的标头中猜测需要哪个响应。此外,没有什么能阻止移动设备访问Web界面。您可以更改路径或更改查询字符串。

因此,在网络上,您可以使用/login,也可以在移动设备上使用/login-json或其他指示您想要json的路径。

或者从网络上,您可以使用/login,也可以在移动设备上使用/login?type=json

我不建议使用user-agent标头来检测请求的意图。而是直接在请求中指定意图。