Здравствуйте, работаю с авторизацией на сайте с использованием SimpleMembership, возникла следующая проблема. Создал область для панели администратора установил аттрибуты [Authorize], [InitializeSimpleMembership], когда перехожу по ссылке первый раз то отправляет на страницу авторизации /Account/Login, вхожу в аккаунт все работает нормально, не выходя из аккаунта. После перезапускаю проект, захожу на панель администратора выдает ошибку:
При установлении соединения с SQL Server произошла ошибка, связанная с сетью или с определенным экземпляром. Сервер не найден или недоступен. Убедитесь, что имя экземпляра указано правильно и что на SQL Server разрешены удаленные соединения. (provider: SQL Network Interfaces, error: 26 - Ошибка при обнаружении указанного сервера или экземпляра)
Если зайти на страницу авторизации при этом не вводя данные, а потом зайти снова в панель администратора, то все работает. В чем может быть причина?
Код контролера /Account
C# |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
| using System.Web.Mvc;
using WebMatrix.WebData;
using Library.Filters;
using Library.Models;
namespace Library.Controllers
{
[Authorize]
[InitializeSimpleMembership]
public class AccountController : Controller
{
//
// GET: /Account/Login
[AllowAnonymous]
public ActionResult Login(string returnUrl)
{
ViewBag.ReturnUrl = returnUrl;
return View();
}
//
// POST: /Account/Login
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public ActionResult Login(LoginModel model, string returnUrl)
{
if (ModelState.IsValid && WebSecurity.Login(model.UserName, model.Password, persistCookie: model.RememberMe))
{
return RedirectToLocal(returnUrl);
}
ModelState.AddModelError("", "Имя пользователя или пароль указаны неверно.");
return View(model);
}
//
// POST: /Account/LogOff
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult LogOff()
{
WebSecurity.Logout();
return RedirectToAction("Index", "Home");
}
#region Вспомогательные методы
private ActionResult RedirectToLocal(string returnUrl)
{
if (Url.IsLocalUrl(returnUrl))
{
return Redirect(returnUrl);
}
return RedirectToAction("Index", "Home");
}
#endregion
}
} |
|
Код InitializeSimpleMembershipAttribute.cs
C# |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
| using System;
using System.Data.Entity;
using System.Data.Entity.Infrastructure;
using System.Threading;
using System.Web.Mvc;
using System.Web.Security;
using WebMatrix.WebData;
using Library.Models;
namespace Library.Filters
{
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = false, Inherited = true)]
public sealed class InitializeSimpleMembershipAttribute : ActionFilterAttribute
{
private static SimpleMembershipInitializer _initializer;
private static object _initializerLock = new object();
private static bool _isInitialized;
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
// Обеспечение однократной инициализации ASP.NET Simple Membership при каждом запуске приложения
LazyInitializer.EnsureInitialized(ref _initializer, ref _isInitialized, ref _initializerLock);
}
private class SimpleMembershipInitializer
{
public SimpleMembershipInitializer()
{
Database.SetInitializer<UsersContext>(null);
try
{
using (var context = new UsersContext())
{
if (!context.Database.Exists())
{
// Создание базы данных SimpleMembership без схемы миграции Entity Framework
((IObjectContextAdapter)context).ObjectContext.CreateDatabase();
}
}
WebSecurity.InitializeDatabaseConnection("DefaultConnection", "UserProfile", "UserId", "UserName", autoCreateTables: true);
var roles = (SimpleRoleProvider)Roles.Provider;
var membership = (SimpleMembershipProvider)Membership.Provider;
if (!roles.RoleExists("Administrator"))
{
roles.CreateRole("Administrator");
}
if (!roles.RoleExists("Moderator"))
{
roles.CreateRole("Moderator");
}
if (membership.GetUser("Admin", false) == null)
{
membership.CreateUserAndAccount("Admin", "admin");
roles.AddUsersToRoles(new[] { "Admin" }, new[] { "Administrator" });
}
}
catch (Exception ex)
{
throw new InvalidOperationException("Не удалось инициализировать базу данных ASP.NET Simple Membership. Чтобы получить дополнительные сведения, перейдите по адресу: http://go.microsoft.com/fwlink/?LinkId=256588", ex);
}
}
}
}
} |
|
Код контроллера /User/Test/
C# |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
| using System.Web.Mvc;
using Library.Filters;
namespace Library.Areas.User.Controllers
{
[Authorize]
[InitializeSimpleMembership]
public class TestController : Controller
{
//
// GET: /User/Test/
[Authorize(Roles = "Administrator, Moderator")]
public ActionResult Index()
{
return View();
}
[AllowAnonymous]
public ActionResult Lorem()
{
return View();
}
}
} |
|