我正在使用用户身份验证构建Flutter应用程序。它与firebase一起正常工作。但是,我想再次对它编码SQL Server数据库。
我现在正想从MVC应用程序返回用户令牌。这是我的控制器中的代码:
Public Function AuthenticateUsers(ByVal APIKey As String, ByVal Password As String, ByVal ReturnSecureToken As Boolean) As JsonResult
Dim Users As Object
If String.IsNullOrEmpty(APIKey) Or String.IsNullOrEmpty(Password) Then
Users = "missing parameters"
Else
If APIKey = "mambo" AndAlso Password = "mambo@email.com" Then
Users = GetUsers()
Else
Users = "Invalid credentials"
End If
End If
Return Json(Users, JsonRequestBehavior.AllowGet)
End Function
Private Function GetUsers() As List(Of UserModel)
Dim usersList = New List(Of UserModel) From {
New UserModel With {
.idToken = 200,
.localId = "localId",
.expiresIn = "3600"
}
}
Return usersList
End Function
这是负责Flutter应用中身份验证的代码部分:
Future<void> _authenticate(
String email, String password, String urlSegment) async {
// final url =
// 'https://www.googleapis.com/identitytoolkit/v3/relyingparty/$urlSegment?key=LONGKEY';
final url = 'https://localhost:12345/Member/AutheticateUsers';
try {
final response = await http.post(
url,
body: json.encode(
{
'APIKey': email.trim(),
'Password': password.trim(),
'ReturnSecureToken': true,
},
),
);
final responseData = json.decode(response.body);
if (responseData['error'] != null) {
throw HttpException(responseData['error']['message']);
}
_token = responseData['idToken'];
_userId = responseData['localId'];
_expiryDate = DateTime.now().add(
Duration(
seconds: int.parse(
responseData['expiresIn'],
),
),
);
_autoLogout();
notifyListeners();
final prefs = await SharedPreferences.getInstance();
final userData = json.encode(
{
'token': _token,
'userId': _userId,
'expiryDate': _expiryDate.toIso8601String(),
},
);
prefs.setString('userData', userData);
} catch (error) {
print(error);
throw error;
}
}
我已经注释掉了可以成功验证Firebase并重写URL以重定向到我的MVC应用程序的那行。
所以现在的问题是我收到请求被拒绝的错误。这是我第一次尝试让外部应用程序调用API。所以我想我可能会缺少一些先决条件/格式。
有人可以指导我如何进行这项工作。
谢谢!
在这个过程中,我发现了一些(我认为)几乎在引入抖动时就显而易见的事情(取决于你从何处读取!)。好吧,让我成为那些想让它变得显而易见的人之一:)
Flutter Flutter 爱火力。因此,对于MS SQL Server爱好者来说,现有的指导很少。我真的很难在firebase中进行查询/查看。因此,很自然地,我一直想知道如何才能以我熟悉的理由SQL Server和mySQL重做该应用程序。
因此,第一个不太明显的注释是:
谢谢https://medium.com/@podcoder/connecting-flutter-application-to-localhost-a1022df63130
我不确定这是否是任何.NET开发人员都会考虑的第一件事...对我来说,这是三天失败后我搜索的最后一件事!
我在上面的代码中遇到的我自己的失败(在我发布的代码中不会很明显)是我创建了一个Controller,而不是APIController。如前所述,这是我的第一项努力,当我开始这样做时,我没有注意到其中的区别。
PS:因为在尝试它的那一刻我就爱上了VS Code中的Flutter,所以我现在知道这并不是不费吹灰之力,而是曾经让我失望的Android中的Java设计!