首页 > 解决方案 > 记住移动设备中的登录用户

问题描述

我使用节点 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!');
                }
            }
        })
    })
});

标签: javascriptnode.jsauthenticationionic-frameworkcapacitor

解决方案


您可以使用保存在离子存储中的解码值作为用户的“id”(您可以阅读有关 JWT 的信息,这是一种标准的执行方式),因此您可以在向您的新请求发出新请求时使用该值node-js 服务器,因此您可以知道哪个用户正在发送请求(相当于在 REST 上登录)。您还可以使用该值更改登录时应用程序的默认页面(例如,未登录时的登录页面和登录时的主页。)


推荐阅读