如何在Flutter和Prestashop中进行登录

问题描述

我在Flutter项目中使用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;}

解决方法

在Prestashop 1.7中,使用了bcrypt。

请参见this答案,它完美地说明了Prestashop如何处理密码加密/散列。