gpt4 book ai didi

codeigniter - 为什么使用 "stick"窗口登录时,登录 session "ionic serve"不起作用,但当我将浏览器指向 www 文件夹时,登录 session 0x104567910 可以工作?

转载 作者:行者123 更新时间:2023-12-02 07:02:03 33 4
gpt4 key购买 nike

我正在使用 Ionic 在 Codeigniter/Ion_Auth/codeigniter-restclient 之上构建登录系统,当我尝试从“ionic 服务器”登录时,登录可以正常工作,但对 Logged_in() 方法的下一个 api 请求返回 false。

当我将浏览器指向 www 文件夹时,同样的事情可以正常工作。

所以这是问题的一步一步:

  1. 运行 ionic 服务

  2. 您会看到登录表单 ( http://localhost:8100/#/app/login )

  3. 输入电子邮件和密码

  4. 其余API返回“登录成功”

  5. $state.go('app.profile') 工作并重定向到 http://localhost:8100/#/app/profile

  6. REST get api/logged_in 返回 false,我重定向到登录页面

如果我在常规浏览器中执行相同操作,则步骤 1 变为:打开浏览器并转到 http://localhost:8888/App/www/#/app/login ,在第 6 步 REST get api/logged_in 返回 true,并且我没有重定向到登录页面,而是停留在个人资料页面上。

代码是一样的。所以我的猜测是 ion_auth 可能没有得到它想要的 cookie 或者 session 被重置。我现在不确定问题是什么。这是我的第一个 Ionic/App 项目,因此我可能会遗漏一些有关使用在浏览器中工作的代码从移动应用程序进行身份验证的正确方法的信息

谢谢

更新:看起来,当使用“ ionic 服务器”窗口时,对 API 的每个请求都会触发一个新 session 。新 session 存储在数据库中,ion_auth 会根据上一个 session 测试 Logged_in,后者不包含登录详细信息。

最佳答案

您正在学习 REST api、cookie 和 session 。 Cookie 和 session 不符合 REST 理念。 Here is why.

让我告诉你我们如何在项目中解决这个问题。了解哪个用户正在请求以及是否具有访问权限的基本方法是通过“Authorization” header 值。您可以使用基本身份验证、Barer 或任何其他身份验证。

我们通常更喜欢基于 token 的授权系统。当登录成功时,服务器发送一个 token 。在 ionic 应用程序中,我们使用名为 SessionServicefactory 来保存它。因此,每当用户登录时,都会存储 token 并用于每个请求。但是如果用户关闭应用程序, token 就会丢失。所以我们可以将其存储在本地存储中。然后,用户可以直接重定向到仪表板,直到用户注销。

app.factory("SessionService", function($window){
var user={};

if ($window.localStorage['user']!=undefined){
user=JSON.parse($window.localStorage['user']);
console.log(user);
}

return{
isLoggedIn:function(){
return !isEmpty(user);
},
logout:function(){
console.log("logout")
user={};
$window.localStorage.clear();
},
setUser:function(data){
user=data;
$window.localStorage['user']= JSON.stringify(user);
},
getUser:function(){
return user;
}
}
})

现在,在每个 Web 请求中,您可以在设置值 Authorization header 时调用 SessionService.getUser().token

更新:

尽管不建议使用 cookie,但您可以在应用程序中轻松使用它。

如果您使用 CORS 发送请求,Angular 不会随请求发送 Cookie。解决此问题的方法之一是在每个请求中发送 withCredentials: true:

$http({withCredentials: true, ...}).get(...)

进一步了解此内容 here .

希望这有帮助!

关于codeigniter - 为什么使用 "stick"窗口登录时,登录 session "ionic serve"不起作用,但当我将浏览器指向 www 文件夹时,登录 session 0x104567910 可以工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30358711/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com