首页 > 解决方案 > 如何在 Flutter 和 Prestashop 中进行登录

问题描述

我在我的颤振项目中使用 Prestashop Web 服务,我可以获取和发布数据并注册客户,但我在登录时遇到了问题。Prestashop 中的登录需要散列密码以进行验证。我尝试了许多用于散列的包,例如crypto package,但没​​有任何效果。这是我的代码。

// 获取用户信息函数获取密码

Future<List<Info>> getUserInfo(String email) async {
var url =
    'https://www.example.com/api/customers?filter[email]=$email&display=[id,lastname,firstname,passwd]';

List<Info> data = new List();
Response response;

response = await get(url, headers: <String, String>{
  'authorization': getAuth(),
});

if (response.statusCode == 200) {
  if (response.body.length != 0) {
    var raw = XmlDocument.parse(response.body);
    var elements = raw.findAllElements("customer");

    data.addAll(elements.map((element) {
      return Info(
        customerID: removeAllHtmlTags(
            element.findElements('id').single.text.toString()),
        firstName: removeAllHtmlTags(
            element.findElements('lastname').single.text.toString()),
        lastName: removeAllHtmlTags(
            element.findElements('firstname').single.text.toString()),
        password: removeAllHtmlTags(
            element.findElements('passwd').single.text.toString()),
      );
    }).toList());
  } else {
    data = null;
  }
}
return data;}

////验证登录

 Future<String> VerifyLogin({String password, String email}) async {
String result = '';
List<Info> data = await getUserInfo(email);
const cookie_key = '$cookie_key';

final cryptPass = crypto.md5
    .convert(utf8.encode(cookie_key + password))
    .toString()
    .toLowerCase();

if (data != null) {
  print(cryptPass);
  print(data.first.password);
  if (data.first.password == cryptPass) {
    final SharedPreferences prefs = await _prefs;
    prefs.setString('id', data.first.customerID);

    result = 'success';
  } else {
    result = 'wrong password';
  }
} else {
  result = 'wrong email';
}
return result;}

标签: restflutterweb-servicesauthenticationprestashop-1.7

解决方案


在 Prestashop 1.7 中使用 bcrypt。

看到这个答案,它完美地解释了 Prestashop 如何处理密码加密/散列。


推荐阅读