2016-04-14 2 views
0

Я нахожусь полностью noob на ASP.NET, и я пытаюсь создать свое первое веб-приложение с помощью этой технологии.MVC5 Пользовательские значения ApplicationUser

Я использую шаблон MVC и приспосабливаюсь к моему проекту.

Моя первая цель - создать систему входа (не просто использовать шаблон, я хочу его понять).

В настоящее время я пытаюсь добавить пользователя со следующими свойствами: First Name, Last Name, Email, Password.

Но я не могу использовать свои собственные свойства ApplicationUser (idk why).

Не могли бы вы рассказать мне, на языке noob, как я это делаю?

Как я уже сказал, я использую шаблон, но я пришлю код:

AccountViewModels.cs

using System.Collections.Generic; 
using System.ComponentModel.DataAnnotations; 

namespace LoginSystem.Models 
{ 

    public class AddUserViewModel 
    { 
     [Required] 
     [StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)] 
     [Display(Name = "First Name")] 
     public string FName { get; set; } 

     [Required] 
     [StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)] 
     [Display(Name = "Last Name")] 
     public string LName { get; set; } 

     [Required] 
     [EmailAddress] 
     [Display(Name = "Email")] 
     public string Email { get; set; } 

     [Required] 
     [StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)] 
     [DataType(DataType.Password)] 
     [Display(Name = "Password")] 
     public string Password { get; set; } 

     [DataType(DataType.Password)] 
     [Display(Name = "Confirm password")] 
     [Compare("Password", ErrorMessage = "The password and confirmation password do not match.")] 
     public string ConfirmPassword { get; set; } 
    } 
} 

AccountController.cs

using System; 
using System.Globalization; 
using System.Linq; 
using System.Security.Claims; 
using System.Threading.Tasks; 
using System.Web; 
using System.Web.Mvc; 
using Microsoft.AspNet.Identity; 
using Microsoft.AspNet.Identity.Owin; 
using Microsoft.Owin.Security; 
using LoginSystem.Models; 

namespace LoginSystem.Controllers 
{ 
    [Authorize] 
    public class AccountController : Controller 
    { 
     private ApplicationSignInManager _signInManager; 
     private ApplicationUserManager _userManager; 

     public AccountController() 
     { 
     } 

     public AccountController(ApplicationUserManager userManager, ApplicationSignInManager signInManager) 
     { 
      UserManager = userManager; 
      SignInManager = signInManager; 
     } 

     public ApplicationSignInManager SignInManager 
     { 
      get 
      { 
       return _signInManager ?? HttpContext.GetOwinContext().Get<ApplicationSignInManager>(); 
      } 
      private set 
      { 
       _signInManager = value; 
      } 
     } 

     public ApplicationUserManager UserManager 
     { 
      get 
      { 
       return _userManager ?? HttpContext.GetOwinContext().GetUserManager<ApplicationUserManager>(); 
      } 
      private set 
      { 
       _userManager = value; 
      } 
     } 


     // 
     // GET: /Account/Register 
     [AllowAnonymous] 
     public ActionResult Register() 
     { 
      return View(); 
     } 

     // 
     // POST: /Account/Register 
     [HttpPost] 
     [AllowAnonymous] 
     [ValidateAntiForgeryToken] 
     public async Task<ActionResult> Register(AddUserViewModel model) 
     { 
      if (ModelState.IsValid) 
      { 
       var user = new ApplicationUser { UserName = model.Email, Email = model.Email }; 
       var result = await UserManager.CreateAsync(user, model.Password); 
       if (result.Succeeded) 
       { 
        await SignInManager.SignInAsync(user, isPersistent:false, rememberBrowser:false); 

        // For more information on how to enable account confirmation and password reset please visit http://go.microsoft.com/fwlink/?LinkID=320771 
        // Send an email with this link 
        // string code = await UserManager.GenerateEmailConfirmationTokenAsync(user.Id); 
        // var callbackUrl = Url.Action("ConfirmEmail", "Account", new { userId = user.Id, code = code }, protocol: Request.Url.Scheme); 
        // await UserManager.SendEmailAsync(user.Id, "Confirm your account", "Please confirm your account by clicking <a href=\"" + callbackUrl + "\">here</a>"); 

        return RedirectToAction("Index", "Home"); 
       } 
       AddErrors(result); 
      } 

      // If we got this far, something failed, redisplay form 
      return View(model); 
     } 


    } 
} 

IdentifyModels

using System.Data.Entity; 
using System.Security.Claims; 
using System.Threading.Tasks; 
using Microsoft.AspNet.Identity; 
using Microsoft.AspNet.Identity.EntityFramework; 

namespace LoginSystem.Models 
{ 
    // You can add profile data for the user by adding more properties to your ApplicationUser class, please visit http://go.microsoft.com/fwlink/?LinkID=317594 to learn more. 
    public class ApplicationUser : IdentityUser 
    { 
     public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<ApplicationUser> manager) 
     { 
      // Note the authenticationType must match the one defined in CookieAuthenticationOptions.AuthenticationType 
      var userIdentity = await manager.CreateIdentityAsync(this, DefaultAuthenticationTypes.ApplicationCookie); 
      // Add custom user claims here 
      return userIdentity; 
     } 
    } 

    public class ApplicationDbContext : IdentityDbContext<ApplicationUser> 
    { 
     public ApplicationDbContext() 
      : base("DefaultConnection", throwIfV1Schema: false) 
     { 
     } 

     public static ApplicationDbContext Create() 
     { 
      return new ApplicationDbContext(); 
     } 
    } 
} 

AddUser.cshtml

@model LoginSystem.Models.AddUserViewModel 
@{ 
    ViewBag.Title = "Add User"; 
} 

<h2>@ViewBag.Title.</h2> 

@using (Html.BeginForm("Add User", "Account", FormMethod.Post, new { @class = "form-horizontal", role = "form" })) 
{ 
    @Html.AntiForgeryToken() 
    <h4>Add a new user.</h4> 
    <hr /> 
    @Html.ValidationSummary("", new { @class = "text-danger" }) 
    <div class="form-group"> 
     @Html.LabelFor(m => m.Email, new { @class = "col-md-2 control-label" }) 
     <div class="col-md-10"> 
      @Html.TextBoxFor(m => m.Email, new { @class = "form-control" }) 
     </div> 
    </div> 
    <div class="form-group"> 
     @Html.LabelFor(m => m.Password, new { @class = "col-md-2 control-label" }) 
     <div class="col-md-10"> 
      @Html.PasswordFor(m => m.Password, new { @class = "form-control" }) 
     </div> 
    </div> 
    <div class="form-group"> 
     @Html.LabelFor(m => m.ConfirmPassword, new { @class = "col-md-2 control-label" }) 
     <div class="col-md-10"> 
      @Html.PasswordFor(m => m.ConfirmPassword, new { @class = "form-control" }) 
     </div> 
    </div> 
    <div class="form-group"> 
     <div class="col-md-offset-2 col-md-10"> 
      <input type="submit" class="btn btn-default" value="Register" /> 
     </div> 
    </div> 
} 

@section Scripts { 
    @Scripts.Render("~/bundles/jqueryval") 
} 

TiA!

+0

Для того, чтобы помочь вам нужно авторизоваться на вашем Controller Action и Model для системы входа в систему –

+0

Вы используете личность? – Randrade

+0

Редактировать: Код добавлен –

ответ

0

Если вы хотите использовать пользовательские свойства в классе ApplicationUser.cs, добавьте требуемое свойство и выполните миграцию, сгенерируйте файл cookie в post post action, используя signInManager, вместо того чтобы поместить его непосредственно в класс ApplicationUser с помощью метода.

Попытайтесь использовать свойства Identity, если они удовлетворяют вашим потребностям, чтобы избежать разных миграций.

Смежные вопросы