javascript - 记住移动设备中的登录用户
问题描述
我使用节点 js 文件在我的移动应用程序上创建了一个登录页面来测试凭据。如果凭据正确,您将进入主页,但它不记得登录的用户,因此每次清理 RAM 时都必须重新登录。
我正在尝试使用@ionic/storage 将我从后端返回的令牌保存在设备中,但这就是我可以在逻辑和代码上走多远。我真的不知道如何处理令牌。对逻辑的一些解释可能会有所帮助,或者一些代码或链接。我真的很感激我能得到的任何帮助!
我正在使用 Ionic Angular [5] 和电容器。
如果需要,我的代码:
.ts 文件
senduserdata(){
var dataToSend = {
username:this.Username,
password:this.Password,
usertype:this.getSelectedSubject,
}
var url = 'http://localhost:3000/login';
this.http.post(url,{data:JSON.stringify(dataToSend)},{responseType: 'text'}).subscribe(
(data)=>{
let decoded = helper.decodeToken(data);
console.log('Decoded: ', decoded);
//the code to save it in storage
this.storage.set('loggedToken', decoded);
if(decoded.usertype === "Customer")
{
alert('Hello Customer')
}
else if(decoded.usertype === "Staff")
{
alert('Hello Staff')
}
}
)
}
节点js文件
//Login
app.post('/login', function (_req, res) {
var data = JSON.parse(_req.body.data);
var username = data.username;
var password = data.password;
var usertype = data.usertype;
mysqlConnection.connect(function () {
if(usertype ==="Customer"){
var query = "SELECT * from " + usertype + " Where Username = '" + username + "' And Password = '" + sha1(password) + "'";
}
else{
var query = "SELECT * from Staff Where Username = '" + username + "' And Password = '" + password + "'";
}
mysqlConnection.query(query, function (err, results, _fields) {
if (err) {
res.send(err);
}
else {
if (results.length > 0 && usertype === "Customer") {
if(results[0].Subscription === "True"){
passs = sha1(password)
const token = jwt.sign({username, passs, usertype}, 'my_secret_key_customer');
console.log(token);
res.send(token);
}
else{
console.log("Email not verified!");
res.send('Email not verified! Check your email for the verification email!');
}
}
else if (results.length > 0 && usertype === "Staff") {
passs = sha1(password)
const token1 = jwt.sign({username, passs, usertype}, 'my_secret_key_staff');
console.log(token1);
res.send(token1);
}
else {
console.log("The password or username is incorrect!");
res.send('The Password or Username is incorrect!');
}
}
})
})
});
解决方案
您可以使用保存在离子存储中的解码值作为用户的“id”(您可以阅读有关 JWT 的信息,这是一种标准的执行方式),因此您可以在向您的新请求发出新请求时使用该值node-js 服务器,因此您可以知道哪个用户正在发送请求(相当于在 REST 上登录)。您还可以使用该值更改登录时应用程序的默认页面(例如,未登录时的登录页面和登录时的主页。)
推荐阅读
- scala - 在两个值之间进行选择的习惯用法
- django - 权限被拒绝,无法打开静态文件,Docker,Django
- shopify - Shopify API 对订单进行分页以获取准确计数
- c - 在 while 循环中使用 fscanf() 读取文本文件
- c++ - 我想从 C++ 代码将二维数组传递给八度函数“imregionalmax”
- php - 如何在wordpress中的两行显示标题
- java - Java Stream distinct().sorted() 的时间复杂度是多少?
- sql - PL/Sql REGR_ p 值
- python - 如何在 Pandas 中创建动态列名?
- javascript - 如何在特定屏幕上禁用反应本机堆栈导航器?