2016-05-07 4 views
2

私はASP.net MVC 6で従業員スケジューリングサイトを作成しています。employeeテーブル、shiftテーブル、およびshiftEmployeeテーブルが多対多の関係を処理しています。MVC 6 - コントローラのアクションを実行するためにパスワードを要求する方法?

従業員ID番号とパスワードを使用して各従業員がサイトにログインするように設定されています。それから彼らは彼らが予定されているそれぞれの将来のシフトを見ることができます。彼らは、「ピンを引っ張る」というプロセスで、割り当てられたシフトをそれぞれ認識しなければなりません。

これまでのところすべてが期待どおりに機能しています。

従業員がシフトごとにピンをプルするときに、ユーザーが既にサイトにサインインしていることを念頭に置いて、パスワードを再入力してこの操作を確認する必要があります。これを達成する最も簡単で正しい/最も安全な方法は何ですか?

プルGET/POSTメソッドは、標準的なMVC編集アクションと基本的に同じです。単純にプルに名前を変更しました。

// GET: PullPin/Pull/5 
public IActionResult Pull(int? id) 
{ 
    if (id == null) 
    { 
     return HttpNotFound(); 
    } 

    var shiftEmp = _context.ShiftEmployees.Single(m => m.ShiftEmployeeID == id); 

    if (shiftEmployee == null) 
    { 
     return HttpNotFound(); 
    } 
} 

// POST: PullPin/Pull/5 
[HttpPost] 
[ValidateAntiForgeryToken] 
public IActionResult Pull(ShiftEmployee shiftEmployee) 
{ 
    var user = GetCurrentUserAsync(); 

    pullPin.PinStatusID = 3; // Status ID #3 = Pulled 

    if (ModelState.IsValid) 
    { 
     _context.Update(shiftEmployee); 
     _context.SaveChanges(); 
     return RedirectToAction("Index"); 
    } 

    return View(shiftEmployee); 
}  

そして、ここでは、標準的なMVC6テンプレートで私のShiftEmployeeクラス

public class ShiftEmployee 
{ 

    public int ShiftEmployeeID { get; set; } 
    public int ShiftID { get; set; } 
    public int EmployeeID { get; set; } 
    public int PinStatusID { get; set; } 

    public virtual Shift Shift { get; set; } 
    [JsonIgnore] 
    public virtual Employee Employee { get; set; } 
    public virtual PinStatus PinStatus { get; set; } 

} 
+0

MVC6テンプレートを使用していますか?つまり、 'UserManager'オブジェクトがあるはずです。あなたは 'UserManager.CheckPasswordAsync(user、password)'を実行できます。 – DavidG

+0

@DavidGありがとう、ありがとうございます。それはまさに私が探していたものです!あなたのコメントを回答として書き直したいのであれば、私はそれをそのまま受け入れることができます。再度、感謝します。 –

答えて

0

あり、それは、ログイン機能のためASP.NET Core Identityを使用しています。そのパッケージの一部は、UserManagerのオブジェクト(。あなたはまた、とりわけSignInManagerを取得)

UserManagerオブジェクトは、具体的には、パスワードをチェックするための方法がCheckPasswordAsyncと呼ばれていて、このように使用されている:あなたがいると仮定すると、

_userManager.CheckPasswordAsync(user, password) 
関連する問題