>source

내 code에 문제가 있습니다. ajax beginForm은 컨트롤러 이벤트를 참조하지 않습니다. 모든 라이브러리가 있습니다. 보기 :

@using MyWebsite.Models
    @model UsersCLS
    @{
        ViewBag.Title= "Index";
    }
    <h1 style="text-align:center;">My Web Site</h1>    <section class="vh-100">        <div class="container py-5 h-100">            <div class="row d-flex align-items-center justify-content-center h-100">                <div class="col-md-8 col-lg-7 col-xl-6">                    <img src="https://mdbcdn.b-cdn.net/img/Photos/new-templates/bootstrap-login-form/draw2.svg" class="img-fluid" alt="Phone image">                </div>                <div class="col-md-7 col-lg-5 col-xl-5 offset-xl-1">                    <form>                        <!--Email input -->                        <div class="form-outline mb-4">                            <input type="email" id="form1Example13" class="form-control form-control-lg" />                            <label class="form-label" for="form1Example13">Email address</label>                        </div>                        <!--Password input -->                        <div class="form-outline mb-4">                            <input type="password" id="form1Example23" class="form-control form-control-lg" />                            <label class="form-label" for="form1Example23">Password</label>                        </div>                        <div>                            <!--Checkbox -->                            <div class="form-check">                                <input class="form-check-input"
                                       type="checkbox"
                                       value=""
                                       id="form1Example3"
                                       checked />                                <label class="form-check-label" for="form1Example3"> Remember me </label>                            </div>                        </div>                        <div>                            <a href="#!">Forgot password?</a>                        </div>                        <!--Submit button -->                        <button type="submit" class="btn btn-primary btn-lg btn-block">Sign in</button>                        <!--Button trigger modal -->                        <button type="button" class="btn btn-primary btn-lg btn-block" data-bs-toggle="modal" data-bs-target="#exampleModal">                            Check in
                        </button>                        <!--Modal -->                        <div class="modal fade" id="exampleModal" tabindex="-1" aria-labelledby="exampleModalLabel" aria-hidden="true">                            <div class="modal-dialog">                                <div class="modal-content">                                    <div class="modal-header">                                        <h5 class="modal-title" id="exampleModalLabel">Modal title</h5>                                    </div>                                    @using (Ajax.BeginForm("Add", "Login", null, new AjaxOptions
                                    {
                                        HttpMethod= "POST",
                                        OnSuccess= "Create",
                                        InsertionMode= InsertionMode.Replace,
                                        UpdateTargetId= "error"
                                    }))
                                    {
                                        <div>                                            @Html.Label("Name")
                                            @Html.TextBox("name", null, new { @class= "form-control" })
                                        </div>                                        <div>                                            @Html.Label("LastName")
                                            @Html.TextBox("lastName", null, new { @class= "form-control" })
                                        </div>                                        <div>                                            @Html.Label("Email")
                                            @Html.TextBox("email", null, new { @class= "form-control", @type= "email" })
                                        </div>                                        <div>                                            @Html.Label("UserName")
                                            @Html.TextBox("userName", null, new { @class= "form-control" })
                                        </div>                                        <div>                                            @Html.Label("Password")
                                            @Html.Password("password", null, new { @class= "form-control" })
                                        </div>                                        <button type="button" id="btnClose" class="btn btn-secondary" data-bs-dismiss="modal">Close</button>                                        <button type="submit" class="btn btn-primary">Save changes </button>                                    }
                                    <div id="error">                                    </div>                                </div>                            </div>                        </div>                    </form>                </div>            </div>        </div>    </section>    <script src="~/Scripts/jquery-3.6.0.min.js"></script>    <script src="~/Scripts/jquery.unobtrusive-ajax.js"></script>    <script src="~/Scripts/bootstrap.js"></script>

이것은 모델입니다:

public class UsersCLS
{
    [Display(Name="Id")]
    public int id { get; set; }
    [Display(Name= "User")]
    public string userName { get; set; }
    [Display(Name= "Password")]
    public string password { get; set; }
    [Display(Name= "Name")]
    public string name { get; set; }
    [Display(Name= "Last Name")]
    public string lastName { get; set; }
    [Display(Name= "Email")]
    public string email { get; set; }
}

그리고 컨트롤러:

public ActionResult Index()
{
    return View();
}
public string Add(UsersCLS usersCLS)
{
    string answer= "";
    if (!ModelState.IsValid)
    {
    }
    else
    {
        using (var bd= new MyWebsiteEntities())
        {
            int count= 0;
            using (var transc= new TransactionScope())
            {
                count= bd.Users.Where(p=> p.UserName.Equals(usersCLS.userName)).Count();
                if (count > 0)
                {
                    answer += "<ul class='list-group'>";
                    answer += "<li></li>";
                    answer += "</ul>";
                }
                else
                {
                    Users users= new Users();
                    users.UserName= usersCLS.userName;
                    SHA256Managed sha= new SHA256Managed();
                    byte[] bypass= Encoding.Default.GetBytes(usersCLS.password);
                    byte[] bycryptoPass= sha.ComputeHash(bypass);
                    string cryptoPass= BitConverter.ToString(bycryptoPass).Replace("-", "");
                    users.Password= cryptoPass;
                    users.Name= usersCLS.name;
                    users.UserName= usersCLS.userName;
                    users.LastName= usersCLS.lastName;
                    users.Email= usersCLS.email;
                    users.Enabled= true;
                    bd.Users.Add(users);
                    answer= bd.SaveChanges().ToString();
                    if (answer== "0")
                    {
                        answer= "";
                    }
                    transc.Complete();
                }
            }
        }
    }
    return answer;
}

}

하지만 (Ajax.BeginForm("추가", "로그인") 컨트롤러 이벤트를 참조하지 않습니다. 도와주세요. 영어가 서툴러서 죄송합니다. 좋은 하루 보내세요. 감사합니다.

주의: 사용자 비밀번호의 무염 해시를 저장하고 있습니다. 그러면 데이터베이스가 레인보우 테이블 공격에 노출됩니다. 해시를 계산하기 전에 레code당 고유한 솔트를 생성하고 입력한 비밀번호와 결합해야 합니다. PBKDF2와 같은 암호 확장 알고리즘도 사용하고 있을 것입니다.

Richard Deeming2022-01-15 04:30:13

일부 참고 자료: Secure Password Authentication Explained Simply; 소금에 절인 암호 해싱 -올바르게 하기

Richard Deeming2022-01-15 04:30:13
  • 이전 Linux에서 가상 CAN 포트를 만드는 방법은 무엇입니까? (C++)
  • 다음 reactjs : Material UI v5 -사용자 정의 테마를 사용할 때 'DefaultTheme' 유형에 'spacing' 속성이 존재하지 않습니다.