rest - 如何在 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;}
解决方案
在 Prestashop 1.7 中使用 bcrypt。
看到这个答案,它完美地解释了 Prestashop 如何处理密码加密/散列。
推荐阅读
- dart - 为什么属性需要 Dart 中非语法糖初始值设定项的默认值?
- javascript - 不同的javascript方法中的不同正则表达式行为
- flutter - Flame 如何支持 Rive 动画?
- html - 为美国观众使用适当的语言子标签
- php - 如何通过改变捐赠总额来减少现金分配总额
- jenkins-plugins - jenkins 自定义插件 java 代码从从机读取文件
- r - R 如何获取美国市场的最后交易日?
- c# - 如何修复 Assets\Scripts\PlayerController.cs(48,9):错误 CS0103:当前上下文中不存在名称“CheckIfWallSliding”?
- matlab - 如何避免在 MATLAB 中重叠绘图标签?
- python - 使用 Django 将字符串从 HTML 输入传递到 python 脚本返回到网页