我已经有了使用Codeigniter PHP框架和Ion Auth身份验证库(用于Codeigniter)构建的CRUD Web应用程序 . 因此用户需要登录才能使用该网站等 .
现在我使用Phonegap和jQuery mobile构建小型移动应用程序,该移动应用程序使用相同的后端 . 后端有“REST like”api处理来自移动客户端的所有ajax请求 .
我该如何处理此移动应用的用户身份验证?我想尽可能多地使用现有的后端代码库 .
我正在计划这样的事情:
-
从客户端发送用户名并传递给服务器
-
将会话ID从服务器返回给客户端
-
将会话ID存储到客户端(本地存储)
-
将每个请求中的该令牌发送到服务器并在服务器端验证它 .
如何在后端执行此操作?对于登录,我可以使用Codeigniter Ion Auth库登录方法并获得Codeigniter(PHP)会话ID . 在第二个请求中,当用户将一些实际数据与sessoin id一起发送时,如何验证会话ID?或者,除了尝试使用现有功能(Codeignitre Ion Auth库)之外,为移动应用程序身份验证构建全新的登录功能是否更好?
所有的想法和建议都非常受欢迎!
2 回答
我认为最好的解决方案就是在控制器和请求之间放置一个中间件 .
你可以用钩子做到这一点:http://ellislab.com/codeigniter/user-guide/general/hooks.html
使用预控制器挂钩 .
要轻松管理API请求,请使用HTTP代码
404 :未找到项目(如/ client /:id)
500 :服务器出现问题
401 :没有令牌
403 :此令牌无权访问此资源(就像想要访问管理员资料的简单用户一样)
你在这里有所有代码:http://en.wikipedia.org/wiki/List_of_HTTP_status_codes
如果您可以更轻松地避免使用复杂的库 . 钩子对我来说是最好的 .
我使用NodeJS,其概念与Express中间件相同 .
我使用phonegap和jQuery Mobile开发了相同类型的移动应用程序,并在我的网站后端使用MySQL数据库,这是在节点js平台,但使用API访问所有功能的整体想法是相同的 .
API调用服务器进行登录以及所有其他操作,如获取数据,将数据发送到服务器等 .
如果您已经在服务器端准备好API,那么只需调用该API即可完成所有操作 . 首先,您可以调用API的登录功能,如果成功则传递用户名和密码,然后返回带有user_id的成功令牌,您可以将其存储在本地移动数据库中 . 我使用SQLite进行移动存储 .
然后在每个其他请求上,我使用该令牌进行身份验证并在服务器上执行操作 .
您还可以在我的应用程序中添加自动登录功能,因此无需每次都登录 .