Tôi mới dùng grails và cố tạo biểu mẫu cho phép người dùng thay đổi địa chỉ email được liên kết với tài khoản của họ cho trang web tôi đang tạo.Grails, làm cách nào để tôi nhận được một đối tượng KHÔNG được lưu
Nó yêu cầu người dùng nhập mật khẩu hiện tại của họ và cũng cho địa chỉ email mới mà họ muốn sử dụng. Nếu người dùng nhập sai mật khẩu hoặc địa chỉ email không hợp lệ thì nó sẽ từ chối chúng với một thông báo lỗi thích hợp.
Bây giờ xác thực email có thể được thực hiện thông qua các ràng buộc trong grails, nhưng thay đổi mật khẩu phải khớp với mật khẩu hiện tại của chúng. Tôi đã thực hiện kiểm tra này như một phương thức trên một lớp dịch vụ.
Xem mã bên dưới:
def saveEmail =
{
def client = ClientUser.get(session.clientUserID)
client.email = params.email
if(clientUserService.checkPassword(session.clientUserID , params.password) ==false)
{
flash.message = "Incorrect Password"
client.discard()
redirect(action:'changeEmail')
}
else if(!client.validate())
{
flash.message = "Invalid Email Address"
redirect(action:'changeEmail')
}
else
{
client.save();
session.clientUserID = null;
flash.message = "Your email address has been changed, please login again"
redirect(controller: 'clientLogin' , action:'index')
}
}
Bây giờ những gì tôi nhận thấy đó là lẻ là nếu tôi bước vào một email không hợp lệ thì nó sẽ không lưu các thay đổi (như mong đợi) NHƯNG nếu tôi nhập sai mật khẩu và một email hợp lệ sau đó nó sẽ lưu các thay đổi và thậm chí ghi chúng trở lại vào cơ sở dữ liệu ngay cả khi nó sẽ cung cấp thông báo lỗi "mật khẩu không hợp lệ" chính xác.
Tôi đã bối rối nên đặt điểm ngắt trong tất cả if/else if/else chặn và thấy rằng nó đã nhấn vào câu lệnh if đầu tiên như dự kiến và không đánh người khác, vì vậy nó sẽ không bao giờ đi qua một cuộc gọi để lưu() phương pháp, nhưng nó đã được lưu anyway.
Sau một ít nghiên cứu, tôi đã xem xét tài liệu về phương thức discard() mà bạn có thể thấy được sử dụng trong mã ở trên. Vì vậy, tôi đã thêm điều này nhưng vẫn không có kết quả. Tôi thậm chí đã thử sử dụng loại bỏ sau đó tải lại đối tượng khách hàng từ DB một lần nữa nhưng vẫn không có con xúc xắc.
Điều này rất bực bội và tôi sẽ biết ơn vì sự giúp đỡ nào, vì tôi nghĩ rằng điều này chắc chắn không phải là một yêu cầu phức tạp!
client.discard() phải là cách để làm điều đó, bạn có thể tái tạo sự cố trong thử nghiệm tích hợp không? Bạn đang sử dụng phiên bản Grails nào? – leebutts
Tôi vừa thử một bài kiểm tra tích hợp trên mã, kỳ quặc đủ nó dường như cư xử như tôi muốn nhưng khi tôi đã làm nó bình thường thông qua các trang web tôi đã nhận được cùng một vấn đề một lần nữa. Tôi muốn đăng mã thử nghiệm nhưng tôi không thể tìm ra cách để làm điều đó ở đây, nó cho tôi biết rằng có quá nhiều ký tự – user350325
bạn nên chấp nhận câu trả lời dưới đây! – oligofren