Advertisement
vencinachev

ASP-Zacodovka-Users

Jan 30th, 2021
960
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 4.48 KB | None | 0 0
  1. 1) ---- Model -----
  2.  
  3. public class User
  4.     {
  5.         [Key]
  6.         public int UserId { get; set; }
  7.  
  8.         [Column(TypeName = "nvarchar(100)")]
  9.         public string Username { get; set; }
  10.  
  11.         [PassValidation(10)]
  12.         [Column(TypeName = "nvarchar(100)")]
  13.         public string Password { get; set; }
  14.  
  15.  
  16.         [Display(Name = "Confirm password")]
  17.         [NotMapped]
  18.         public string ConfirmPassword { get; set; }
  19.  
  20.         [Column(TypeName = "int")]
  21.         public int Age { get; set; }
  22.     }
  23.  
  24.  
  25. 2) -- DB context --
  26.  public class ApplicationDbContext : DbContext
  27.     {
  28.         public  ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
  29.             : base(options)
  30.         {
  31.         }
  32.  
  33.         public DbSet<User> users { get; set; }
  34.     }
  35.  
  36. 3) -- appsettings.json -> Add connection string
  37.  
  38.  "ConnectionStrings": {
  39.     "UserDbStr": "Data Source=(localdb)\\MSSQLLocalDB;Initial Catalog=UsersDB;"
  40.   }
  41.  
  42. 4) --.... Startup.cs -> void Configure()...
  43.             services.AddDbContext<ApplicationDbContext>(dbContOp => dbContOp.UseSqlServer(Configuration.GetConnectionString("UserDbStr")));
  44.  
  45. 5) -- Package manager Console ---
  46.  
  47. Add-Migration "InitialCreate"
  48. Update-Database
  49.  
  50. 6) -- Scaffold
  51.  
  52.  
  53. 7) -- Custom validation
  54.  public class PassValidation : ValidationAttribute
  55.     {
  56.         private readonly int _minL;
  57.  
  58.         public PassValidation(int minL)
  59.         {
  60.             this._minL = minL;
  61.         }
  62.         public override bool IsValid(object value)
  63.         {
  64.             if (value == null)
  65.             {
  66.                 return false;
  67.             }
  68.             string pass = value as string;
  69.             if (pass.Length < _minL)
  70.             {
  71.                 return false;
  72.             }
  73.             return true;
  74.         }
  75.     }
  76.  
  77. 8)  -- Add Session
  78.  
  79. 8.1  ... public void ConfigureServices(IServiceCollection services)....
  80.     services.AddSession(options => {
  81.                 options.IdleTimeout = TimeSpan.FromMinutes(60); //You can set Time  
  82.             });
  83.  
  84. 8.2 ... public void Configure()...
  85. app.UseSession();
  86.  
  87. 9. -- Hash SHA256 --
  88.  public class Crypto
  89.     {
  90.         public static string ComputeSha256Hash(string rawData)
  91.         {
  92.             // Create a SHA256  
  93.             using (SHA256 sha256Hash = SHA256.Create())
  94.             {
  95.                 // ComputeHash - returns byte array  
  96.                 byte[] bytes = sha256Hash.ComputeHash(Encoding.UTF8.GetBytes(rawData));
  97.  
  98.                 // Convert byte array to a string  
  99.                 StringBuilder builder = new StringBuilder();
  100.                 for (int i = 0; i < bytes.Length; i++)
  101.                 {
  102.                     builder.Append(bytes[i].ToString("x2"));
  103.                 }
  104.                 return builder.ToString();
  105.             }
  106.         }
  107.     }
  108.  
  109.  
  110. 10 --- Login Action ---
  111.  public async Task<IActionResult> Login(string Uname, string Pass)
  112.         {
  113.             string hPass = Utilities.Crypto.ComputeSha256Hash(Pass);
  114.             var user = await _context.users
  115.                 .FirstOrDefaultAsync(m => m.Username == Uname && m.Password == hPass);
  116.             if (user == null)
  117.             {
  118.                 ViewData["result"] = "Invalid username or password!";
  119.                 return View();
  120.             }
  121.             HttpContext.Session.Set("Username", Encoding.UTF8.GetBytes(user.Username));
  122.             HttpContext.Session.Set("Age", Encoding.UTF8.GetBytes(user.Age.ToString()));
  123.             return RedirectToAction("Index", "WebSystem");
  124.         }
  125.  
  126. 11.  Log to system
  127.  public IActionResult Index()
  128.         {
  129.             byte[] buffer = new byte[100];
  130.             bool hasuser = HttpContext.Session.TryGetValue("Username", out buffer);
  131.             if (hasuser)
  132.             {
  133.                 ViewData["user"] = Encoding.UTF8.GetString(buffer);
  134.             }
  135.             bool hasage = HttpContext.Session.TryGetValue("Age", out buffer);
  136.             if(hasage)
  137.             {
  138.                 ViewData["age"] = int.Parse(Encoding.UTF8.GetString(buffer));
  139.             }
  140.             else
  141.             {
  142.                 ViewData["age"] = "---";
  143.             }
  144.             if (hasuser)
  145.             {
  146.                 return View();
  147.             }
  148.             else
  149.             {
  150.                 return RedirectToAction("Login", "Users");
  151.             }
  152.         }
  153.  
  154. 12. --- Logout --
  155.  public IActionResult Logout()
  156.       {
  157.             HttpContext.Session.Clear();
  158.             return RedirectToAction("Login", "Users");
  159.        }
  160.  }
  161.  
  162.  
  163.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement