讓使用者在 WSSv3(MOSS 2007) 變更密碼

Sharepoint 的使用者資訊設定裡, 並沒有提供讓使用者自行修改密碼的功能。還好 WSSv3 (MOSS 2007) 使用的是 ASP.NET 2.0 Membership Provider, 修改密碼的工作可以交給 Membership Provider 來處理, 我們只要使用 <asp:ChangePassword /> 這個控制項, 就可以提供變更密碼的功能。

一種方法是把 <asp:ChangePassword /> 做成 WebPart (或者是加到 SmartPart 之中), 然後建立一個網頁組件頁面, 再把 WebPart 放進頁面中。

另一種作法, 是建立一個專屬的 .aspx 頁面到 layouts 目錄, 因為變更使用者個人資訊的頁面也是這樣。將下面的檔案存到 C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\TEMPLATE\LAYOUTS\userchgpwd.aspx, (如果你的 layouts 位置不同請找一下正確的路徑)

<%@ Page Language="C#" MasterPageFile="~/_layouts/application.master" %>
<script runat="server">
protected void cp1_ContinueButtonClick(object sender, EventArgs e)
{
    Response.Redirect(Request.ApplicationPath);
}
</script>

<asp:Content ContentPlaceHolderId="PlaceHolderPageTitle" runat="server">
    變更密碼
</asp:Content>
<asp:Content ContentPlaceHolderId="PlaceHolderMain" runat="server" OnContinueButtonClick="cp1_ContinueButtonClick">
    <table cellspacing="0" cellpadding="0">
        <tr>
        <td>
            <asp:ChangePassword id="cp1" runat="server">
            </asp:ChangePassword>
         </td>
         </tr>
     </table>
</asp:Content> 

 第二步則是在使用者選單裡加入變更密碼的連結, 要修改 C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\TEMPLATE\CONTROLTEMPLATES\Welcome.ascx 這個檔案, 在 ID_PersonalInformation 與 ID_LoginAsDifferentUser 之間加入一個新的 <SharePoint:MenuItemTemplate />, 並把點選路徑指向 /_layouts/userchgpwd.aspx (如果你的密碼變更路徑不一樣, 要改成正確的路徑), 就會在使用者選單裡多一個變更密碼的選項。

<SharePoint:MenuItemTemplate runat="server" id="ID_PersonalInformation"
    ...
     />

<SharePoint:MenuItemTemplate runat="server" id="ID_ChangePassword"
    Text="變更密碼"
    Description="修改個人登入密碼"
    MenuGroupId="100"
    Sequence="100"
    UseShortId="true"
    ClientOnClickNavigateUrl="/_layouts/userchgpwd.aspx"
    />

<SharePoint:MenuItemTemplate runat="server" id="ID_LoginAsDifferentUser"
    ...
    />