Я использую DotNetOpenAuth с провайдером нестандартного входа для входа пользователей на мой сайт.У меня большая часть кода работает, но у меня проблема с возвратом представления и его отображением, чтобы пользователи могли войти в провайдера.По сути, действие возвращает actionresult, который является страницей входа конкретного провайдера, обратно в вызывающий javascript.Я ожидал этого, так как мне нужно получить результаты входа обратно в JavaScript.В основном, что происходит, я получаю некоторую ошибку о разрешении доступа, затем три пустых поля (смотрите в ответе на вызов) и затем ничего.Мне нужно, чтобы перейти на сайт провайдера и войти в систему.
Пример данных: url = https://www.google.com/accounts/o8/id, requireUserName = false, username = test (предположим, он был введен в текстовое поле).
Ниже приведен код:
JavaScript:
function ProviderSignOn(url, requiresUserName) {
var username = $("#openUserNameText").val();
if ((requiresUserName == 'True') && (username == '')) {
clickedProviderUrl = url;
$('#openUserNameDiv').show('fast');
}
else {
$('#openUserNameDiv').hide('fast');
$("#openUserNameText").val('');
$.ajax({
type: "POST",
url: "/Account/ProviderSignOn",
data: "provider=" + url + "&username=" + username,
success: function (data) {
alert(data.Error);
alert(data.Message);
alert(data.Identifier);
},
failure: function (data) {
alert(data.Error);
alert(data.Message);
alert(data.Identifier);
}
});
}
}
Действие контроллера:
public ActionResult ProviderSignOn(string provider, string username)
{
string providerUrl = provider.Replace("{username}", username);
bool error = true;
string message = String.Empty;
string identifier = String.Empty;
var response = _openId.GetResponse();
if (response == null)
{
Identifier id;
if (Identifier.TryParse(providerUrl, out id))
{
try
{
return _openId.CreateRequest(providerUrl).RedirectingResponse.AsActionResult();
}
catch (ProtocolException ex)
{
throw ex;
}
}
else
{
error = true;
message = "Invalid";
identifier = String.Empty;
}
}
else
{
switch (response.Status)
{
case AuthenticationStatus.Authenticated:
error = false;
message = "Success";
identifier = response.ClaimedIdentifier;
break;
case AuthenticationStatus.Canceled:
error = true;
message = "Canceled";
identifier = String.Empty;
break;
case AuthenticationStatus.Failed:
error = true;
message = "Failed";
identifier = String.Empty;
break;
}
}
return Json(new { Error = error, Message = message, Identifier = identifier });
}