Wednesday, September 08, 2010

Viewing Category


Profile

 

    15

    Có nhiều hoàn cảnh khi mình phải thay đổi password của 1 user trong site DNN. Và mỗi hoàn cảnh có cách giải quyết khác nhau.

    Trường hợp hiện tại của mình là có code và database của 1 site DNN. Mình đã cài đặt thành công. Nhưng vấn đề là mình không có account host của nó. Vậy làm sao để có thể đăng nhập được? Vấn đề nữa là nó disable link đăng kí mới luôn.

    Mình đã thử tạo 1 site mới. Rồi copy password và passwordsalt từ site mới cho account của host trên site cũ. Nhưng cũng không được.

    Tưởng bất lực rồi. Nhưng search trên mạng thì mình thấy 1 link sau. Và cách làm của nó đã khắc phục được vấn đề.

    Cài stored procedure sau:

    create procedure [dbo].[uap_ResetPassword]

    @UserName NVarChar(255),

    @NewPassword NVarChar(255)

    [Read the rest of this article...]

    Posted in: Profile
    18
    Phần này mình cũng mới phát hiện khi bị bug trong module MyProfileModule. Ban đầu, mình dùng code sau để sửa:
    UserInfo temp = UserInfo;
                temp.DisplayName = tboxDisplayName.Text;
                temp.Email = tboxEmail.Text;
                temp.FirstName = (tboxFirstName.Text.Length > 0) ? tboxFirstName.Text : "FName";
                temp.LastName = (tboxLastName.Text.Length > 0) ? tboxLastName.Text : "LName";
                temp.PortalID = PortalId;
                temp.Membership.Password = tboxPassword.Text;
                temp.Profile.City = tboxCity.Text;           
                UserController.UpdateUser(PortalId, temp);
    Nghĩ rằng sẽ cập nhật password dễ dàng. Không ngờ rằng pass không đổi được theo cách này. Loay hoay cả buổi thì mình cũng phát hiện rằng cần sử dùng hàm ChangePassword để làm việc này. Nó cần có password cũ và password mới. Do đó cần làm 2 textbox để user nhập password cũ và mới. Và đây là code:
    UserInfo temp = UserInfo;           
                temp.DisplayName = tboxDisplayName.Text;
                temp.Email = tboxEmail.Text;
                temp.FirstName = (tboxFirstName.Text.Length > 0) ? tboxFirstName.Text : "FName";
                temp.LastName = (tboxLastName.Text.Length > 0) ? tboxLastName.Text : "LName";
                temp.PortalID = PortalId;
                temp.Membership.Password = tboxPassword.Text;
                temp.Profile.City = tboxCity.Text;           
                UserController.UpdateUser(PortalId, temp);
     
                bool temp1= UserController.ChangePassword(temp, tboxOldPassword.Text, temp.Membership.Password);
                if(temp1==false)
                {
                    lbError.Text = "Update password không thành công. Xin vui lòng kiểm tra password cũ.";
                    return false;
                }
    Code ví dụ có thể view trong module MyProfileModule version 01.00.01.

    [Read the rest of this article...]

    Posted in: Profile
    12
    Lúc trước, ngồi làm module MyProfileModule. Mình cứ tưởng mọi thứ xong rồi nên không test kĩ. Ai dè gần đây có bạn phát hiện ra vấn đề. Khi register 1 account mới, có property City. Cứ nghĩ rằng đưa giá trị vào UserInfo thì sẽ ok thôi. Ai dè lại phát hiện ra lỗi.
    UserInfo temp = new UserInfo();
                temp.Username = tboxUserName.Text;
                temp.DisplayName = tboxDisplayName.Text;
                temp.Email = tboxEmail.Text;           
               temp.FirstName =(tboxFirstName.Text.Length > 0)? tboxFirstName.Text:"FName";
                temp.LastName = (tboxLastName.Text.Length > 0) ? tboxLastName.Text : "LName";
                temp.PortalID = PortalId;
                temp.Membership.Password = tboxPassword.Text;
                temp.Profile.City = tboxCity.Text;
     
                DotNetNuke.Security.Membership.UserCreateStatus temp1 = UserController.CreateUser(ref temp);
    Thông tin city được đưa vào Profile. Rồi dùng hàm CreateUser để tạo. Đến khi dùng hàm để lấy thông tin user thì city lại bằng null. Kiểm tra table UserProfile thì thấy có dữ liệu mà. Điên cả đầu. T_T
    Kiểm tra lại table ProfilePropertyDefinition, thì mình thấy nó có đến 2 item cùng nói về property City, trong đó 1 cái thì PortalID bằng null, 1 cái thì bằng 0. Và kiểm tra kĩ thì thấy thông tin property city trong table UserProfile thì là của thằng có portalID bằng null. Hèn chi khi lấy thông tin user thì city bằng null.
    Sau 1 hồi mày mò nữa thì cũng tìm được cách giải quyết. Thêm vào đoạn code sau:
     
                DotNetNuke.Security.Membership.UserCreateStatus temp1 = UserController.CreateUser(ref temp);
                if (temp1 == DotNetNuke.Security.Membership.UserCreateStatus.Success)
                {
                    lbError.Text = "User is created successfully";
                    UserInfo temp2 = UserController.GetUser(PortalId,temp.UserID,true);
                    temp2.Profile.City = temp.Profile.City;
                    UserController.UpdateUser(PortalId, temp2);
                    Response.Redirect(DotNetNuke.Common.Globals.NavigateURL(PortalSettings.HomeTabId, "", ""));
                    return true;
                }
    Tạo User. Nếu user thành công thì lấy thông tin user đó ra từ CSDL. Rồi cập nhật lại profile.city trước khi đưa lại vào CSDL. Thế là xong.
    Cái vụ này khiến mình mệt mỏi hơn 2 ngày trời. Hix.

     

    [Read the rest of this article...]

    Posted in: Profile
    03

    Nhiều lúc, theo yêu cầu, có những field bắt buộc trong trang Registration lại không cần thiết với chúng ta. Khi đó, ta phải bỏ nó đi.

    Mình có 1 giải pháp cho việc này.Tuy nhiên, mình cũng phải thú nhận rằng đây không phải là cách hay. Và nó cũng ma nữa. Chỉ dùng khi không còn cách nào khác hoặc thời gian gấp mà thôi. Đó là dùng javascript để dấu row đó đi.
    Ví dụ như trong trang Registration có dòng nhập thông tin FirstName. Mình sẽ dùng javascript để gán giá trị mặc định cho nó. Khi đó, nó vẫn có giá trị để lưu vào trong CSDL. Đồng thời mình ẩn nó đi.
    Và đây là code:
    <script language="javascript" type="text/javascript">
    try
    {
        var arrTemp=document.getElementById("dnn_ctr_ManageUsers_User_UserEditor_tbl");
        if(arrTemp!=null)
        {
            var temp=arrTemp;
            var rows = temp.getElementsByTagName("tr"); 
            temp=rows[1];   
            temp.style.display="none";
        }
     
        var arrTemp=document.getElementsByName("dnn$ctr$ManageUsers$User$UserEditor$ctl01$FirstName");
        if(arrTemp!=null)
        {
            var temp=arrTemp[0];
            temp.value="Duc";   
        }
    }
    catch(e)
    {
    }
    </script>

    [Read the rest of this article...]

    Posted in: Profile
    02

    Mấy hôm nay có một vài bạn hỏi mình về những vấn đề liên quan đến phần Profile như thay đổi layout của trang Login, Registration… Có 1 vài cái mình biết thì mình có viết article về những vấn đề đó. Tuy nhiên, mình cũng chưa đi sâu vào vấn đề này nên có nhiều vấn đề mình cũng chịu. Một trong số vấn đề đó là việc xóa bớt field trong trang Registration. Ví dụ như bỏ field First name, last name đi chẳng hạn.

    Thế là hôm qua và hôm nay, mình đã dành thời gian để nghiên cứu về vấn đề này. Đầu tiên, mình đã thử nghiên cứu source code của nó. Mình đã view các trang ascx và cs trong thư mục Admin/Users. Đi lần theo đó, mình đi vào thư mục controls. Rồi mình phải view source trong gói Source. Rồi mình cũng thử tìm hiểu database của nó. Ban đầu cũng có vài tín hiệu khả quan. Tuy nhiên, sau 1 hồi nghiên cứu đủ thứ, mình vẫn chưa thể tìm được chỗ nào đề có thể chỉnh được vụ field đó. T_T
    Tiếp đến, là mình thử search trên mạng. Thấy việc này cũng có nhiều người hỏi về vấn đề này. Nói tóm lại là không thể chỉnh được vì DNN không cung cấp công cụ để làm việc này.
    Điều đó thể hiện rõ nhất trong bài trả lời cuối cùng của link sau:
    Có các hướng xử lý sau đây:
    -Mua module của DataSprings
    Nhưng giá chat quá. T_T
    Hoặc thằng này:
    -Tự viết custom module.
    Chắc mình phải tự viết module thôi. Nhưng lười quá. Giá mà lượm được module custom dạng này để chỉnh sửa lại thì tốt quá. >”<
    Ngoài ra, mình cũng vừa nghĩ ra 1 cách mới. Nhưng cách này chỉ là kiểu ma mãnh (cheat) chứ không thực sự là cách. Mình sẽ trình bày cách làm này trong bài viết tiếp sau.

    [Read the rest of this article...]

    Posted in: Profile
    28

    Bài viết ngắn này hướng dẫn cách settings để khi user đăng ký account mới thì phải chờ email phản hồi, chấp nhận của admin hay host.

    -Bạn đăng nhập với quyền host.
    -Vào Admin->Site Settings.
    -Mở Advanced Settings->Security Settings.
    -Chọn giá trị Verified cho User Registration.
    -Click Update.

    [Read the rest of this article...]

    Posted in: Profile
    27

    Vừa rồi có bạn gửi câu hỏi về cách bỏ phần Forgot Password và Remember me. Mình xin trình bày cách để thực hiện việc đó.

    Bạn hãy mở code của trang Login.ascx nằm trong thư mục Admin/Authentication. Bạn có thể thấy các đoạn code sau:
    <tr>
                    <td colspan="2" align="left"><asp:checkbox id="chkCookie" class="Normal" resourcekey="Remember" text="Remember Login" runat="server" /></td>
              </tr>
              <tr height="5"><td colspan="2"></td></tr>
              <tr>
                    <td id="tdRegister" runat="server" colspan="2" align="left"><asp:Linkbutton id="cmdRegister" resourcekey="cmdRegister" cssclass="CommandButton" text="Register" runat="server"/></td>
              </tr>
              <tr>
                    <td id="tdPassword" runat="server" colspan="2" align="left"><asp:Linkbutton id="cmdPassword" resourcekey="cmdForgotPassword" cssclass="CommandButton" text="Forgot Password?" runat="server" /></td>
              </tr>
    Khi đó ta có thể xóa chúng đi.

    [Read the rest of this article...]

    Posted in: Profile
    26

    Khi đăng kí 1 account trên DNN, user phải nhập email. Tuy nhiên theo mặc định của các settings thì ta có thể nhập trùng email. Ví dụ user A có thể sử dụng cùng email address với user B. Để tránh tình trạng đó, ta cần chỉnh lại trong web.config như sau.

    Tìm requiresUniqueEmail và đặt lại giá trị là true.
    Vậy là vấn đề được giải quyết.
    Bài viết được dịch từ:

    [Read the rest of this article...]

    Posted in: Profile
    07

     

    Theo mặc định, Dotnetnuke cung cấp cho chúng ta một số field trong profile như: first name, last name, street, city, zip… Tuy nhiên, trong thực tế, nhiều lúc chúng ta lại cần nhiều hơn thế. Ví dụ như có khi chúng ta cần field ngày tốt nghiệp, ngày đi làm…May mắn là Dotnetnuke hỗ trợ cho chúng ta thêm field vào profile.
    -Đăng nhập với quyền host.
    -Vào Host/Lists.
    -Click Add List để tạo list mới.
    -Nhập các thông tin. Chú ý phần list name.
    -Click Save.
    -Sau đó bạn nhập các Entry text và entry value cho list đó.
    -Sau đó, ta vào Admin/User Accounts.
    -Click Manage Profile Properties.
    -Click Add new profile property.
    -Nhập các thông tin cần thiết. Lưu ý property name chính là list name.
    Sau đó bạn thử vào Profile của 1 user bất kì. Click Manage Profile thì bạn sẽ thấy field bạn mới tạo ra.
    Bài viết lấy từ link:

    [Read the rest of this article...]

    Posted in: Profile
    06

     

    Mỗi khi login hay register, ta hay dùng những trang login và register mặc định của Dotnetnuke. Nhiều khi các trang của nó nhìn rất boring. Có nhiều người muốn thay đổi giao diện của nó 1 chút. Rất may, Dotnetnuke có hỗ trợ cho việc thay đổi trang login, register và update profile mới.
    Trước tiên, bạn cần lưu lại đường link của các trang Login và Register mặc định của Dotnetnuke cho an toàn.
    Để thay đổi trang Login, ta làm các bước như sau:
    -Đăng nhập với quyền host.
    -Tạo 1 trang mới mà bạn muốn, ví dụ như trang MyLogin.
    -Đưa module Account Login của Dotnetnuke vào trang này.
    Sau đó bạn có thể chỉnh module này bằng cách vào Settings của module để làm những việc bạn muốn.
    -Sau đó, bạn vào Host/Portal.
    -Click lên icon edit portal của ta.
    -Trong Advanced Settings/Page Management, sửa Login Page tới trang MyLogin.
    -Click Submit.
     
    Để thay đổi trang Register và User Account, ta làm các bước sau:
    -Tạo 1 trang mới, ví dụ như MyRegister.
    -Đưa module User Account vào trang MyRegister.
    Sau đó bạn có thể chỉnh module này bằng cách vào Settings của module để làm những việc bạn muốn.
    -Sau đó, bạn vào Host/Portal.
    -Click lên icon edit portal của ta.
    -Trong Advanced Settings/Page Management, sửa User Page tới trang MyRegister.
    -Click Submit.
    Vậy là bây giờ khi click lên Login thì nó sẽ chuyển về trang MyLogin, và click lên Register thì nó sẽ chuyển về MyRegister. Tuy nhiên hiện giờ vẫn còn nhược điểm là chưa chuyển được trang Forgot Password. Đang chờ bài blog của tác giả. ^_^
     
    Bài viết được dịch từ

    [Read the rest of this article...]

    Posted in: Profile
    HomeTrangITForum
    Copyright 2010 by Nguyễn Minh ĐứcDesigned by DyNNamiteTerms Of UsePrivacy Statement