[sitecore][secure][login]簡単なセキュアーセクションの設定
概要:簡単なセキュアーセクションの設定をする手順です。
この前、お客からセクション別にログイン使ってアクセスできないか言われました。既存のサイトコアのextranetユーザーで管理しでもいいと言ったので、そのメモ書きを書きます。
まず、テストのセクションを作成しましょう。
例えば、人事と開発とあります。人事セクションのコンテンツは人事部の関連者のみアクセスができ、開発部のコンテンツは開発部の方のみアクセスができます。ディフォルトの設定では、だれでもこれらのページへのアクセスが可能です。
次に、それぞれの関係者のログインを作成しましょう。
さて、それぞれのセクションにてアクセス権限を設定しましょう。
開発のセクションは開発のログインはのみアクセス許可します。
extranet\Anonymous のアクセスを停止します。
アクセス権限の設定の後、ログインページを作成ししましょう。
ユーザーログインのサブレイアウトを追加します。ページーへ追加します
ここからサンプルのログイン画面を取得。ログインページへ行くと、こんな感じです。
local.sandbox.com/SecuredーSection/LoginPage
さて、ログイン画面を設定のあと、開発のページへ行くと、許可がない画面になります。
local.sandbox.com/Secured Section/dev/DEV
URLをみれば、サイトコアはアクセスの許可がない際にnoaccess.aspxにリダイレクトされます。 このページを先ほど作成したログインページへ指定すればいい。
この設定はWeb.configになるNoAccessUrlにて設定します。
Web.config <!-- ACCESS DENIED HANDLER Url of page handling 'Acess denied' errors --> <setting name="NoAccessUrl" value="/Secured Section/LoginPage.aspx" />
さて、ログイン画面を設定のあと、ログイン画面が表示され、開発のログインで登録すれば、ページが開発の関係者のみアクセスができます。
このメモ書きに使用したコードです:
UserLogin.ascx
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="UserLogin.ascx.cs" Inherits="local.sandbox.com.Website.layouts.Sandbox.UserLogin" %> <div id="login"> <h2> <span class="fontawesome-lock"> ログイン </span> </h2> <form action="javascript:void(0);" method="POST"> <fieldset> <p><label for="email">ユーザー名</label></p> <p> <asp:TextBox ID="txtUserName" runat="server" /> </p> <p><label for="password">パスワード</label></p> <p> <asp:TextBox ID="txtPassword" runat="server" textmode="password" /> </p> <asp:Panel ID="pnlError" runat="server" Visible="false" > <p> <span style="color:#FF0000"> <i>*無効なユーザー名またはパスワード。</i> </span> </p> </asp:Panel> <asp:Button ID="btnSubmit" runat="server" OnClick="btnSubmit_Click" Text="[OK]" /> </fieldset> </form> </div>
UserLogin.ascx.cs
namespace local.sandbox.com.Website.layouts.Sandbox { #region using System; using System.Security.Authentication; using System.Web.UI; using Sitecore.Links; using Sitecore.Security.Authentication; using Sitecore.SecurityModel; using Sitecore.Web; #endregion /// <summary> /// The user login. /// </summary> public partial class UserLogin : UserControl { #region Fields /// <summary> /// The redirect url str. /// </summary> private string RedirectUrlStr = "/"; #endregion #region Methods /// <summary> /// The btn submit_ click. /// </summary> /// <param name="sender"> /// The sender. /// </param> /// <param name="e"> /// The e. /// </param> /// <exception cref="AuthenticationException"> /// </exception> protected void btnSubmit_Click(object sender, EventArgs e) { if (this.ValidateData()) { try { var domain = Sitecore.Context.Domain; var domainUser = domain.Name + @"\" + this.txtUserName.Text; if (AuthenticationManager.Login(domainUser, this.txtPassword.Text)) { WebUtil.Redirect(this.RedirectUrlStr); } else { this.pnlError.Visible = true; throw new AuthenticationException("Invalid username or password."); } } catch (AuthenticationException) { } } } /// <summary> /// The page_ load. /// </summary> /// <param name="sender"> /// The sender. /// </param> /// <param name="e"> /// The e. /// </param> private void Page_Load(object sender, EventArgs e) { if (this.Request.QueryString["item"] != null) { var path = this.Request.QueryString["item"]; using (new SecurityDisabler()) { var itemUrl = "/sitecore/content/Home" + path.Replace("-", " "); if (!string.IsNullOrEmpty(itemUrl)) { var dest = Sitecore.Context.Database.GetItem(itemUrl); if (dest != null) { this.RedirectUrlStr = LinkManager.GetItemUrl(dest); } } } } } /// <summary> /// The validate data. /// </summary> /// <returns> /// The <see cref="bool" />. /// </returns> private bool ValidateData() { var isValid = true; if (string.IsNullOrEmpty(this.txtUserName.Text) || string.IsNullOrEmpty(this.txtPassword.Text)) { this.pnlError.Visible = true; isValid = false; } return isValid; } #endregion } }