WebSurfer's Home

トップ > Blog 1   |   ログイン
APMLフィルター

ユーザー登録時のプロファイル情報取得

by WebSurfer 2010年8月1日 16:26

CreateUserWizard を利用して新規ユーザー登録をする際に、ユーザーの漢字の氏名、住所などのユーザープロファイル情報を取得し、ASP.NET プロファイルを使用して保存する方法の紹介です。

プロファイル情報の取得

MSDN ライブラリの CreateUserWizard クラス の 3 番目のコード例に、ユーザーの氏名をプロファイル情報として取得する方法が書かれています。

でも、これではうまくいきません。以下の問題があります。

  1. web.config に <anonymousIdentification enabled="true" /> が必須(サンプルには書いてない)。
  2. サンプルには <add name="userName" /> としか書いてないが、それでは allowAnonymous がデフォルトの false となり、Profile.SetPropertyValue メソッドで、ProviderException 例外がスローされる。
  3. allowAnonymous を true にすると成功するように見えるが、匿名ユーザーの UserId の方にのみプロファイルデータが登録され、新規認証済みユーザーの UserId には登録されない。結果、新規認証済みユーザーの ID とパスワードで再ログインしてもプロファイルデータは取得できない。

上記の問題を解決して MSDN ライブラリのサンプルを書き換えると、以下のようになります。なお、サンプルの userName は KanjiName に変更していますので注意してください。

web.config の設定

<anonymousIdentification  enabled="true" />

<profile>
    <properties>
        <add name="KanjiName" />
    </properties>
</profile>

.aspx のコード

<%@ page language="C#"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">

  void CreateUserWizard1_CreatedUser(object sender, EventArgs e)
  {
    ProfileCommon profile = 
      (ProfileCommon)ProfileCommon.Create(
        CreateUserWizard1.UserName, true);
    profile.KanjiName = lastName.Text + " " + firstName.Text;
    profile.Save();
  }
    
</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
  <head id="Head1" runat="server">
    <title>CreateUserWizard.CreatedUser サンプル</title>
  </head>
  <body>
    <form id="form1" runat="server">
      <div>
        <asp:createuserwizard 
          id="CreateUserWizard1" 
          oncreateduser="CreateUserWizard1_CreatedUser"
          runat="server">
          <wizardsteps>
            <asp:wizardstep 
              ID="Wizardstep1" 
              runat="server" 
              steptype="Start" 
              title="Identification">
              氏名を記入してください:<br />
              <table width="100%">
                <tr>
                  <td>
                    姓:</td>
                  <td>
                    <asp:textbox id="lastName" runat="server" />
                  </td>
               </tr>
               <tr>
                  <td>
                    名:</td>
                  <td>
                    <asp:textbox id="firstName" runat="server" />
                  </td>
                </tr>
              </table>
            </asp:wizardstep>
            <asp:createuserwizardstep 
                ID="Createuserwizardstep1" 
                runat="server" 
                title="Sign Up for Your New Account">
            </asp:createuserwizardstep>
          </wizardsteps>
        </asp:createuserwizard>
      </div>
    </form>
  </body>
</html>

なお、allowAnonymous="true" としておくと、aspnet_Users に匿名ユーザーが残ってしまうことがあるので、ユーザー登録のときに記入してもらう漢字名などのデータは、allowAnonymous="false" としておくのが正解のようです。

また、例えば買い物籠のように、最初は匿名ユーザーとして入力され、ある時点で認証ユーザーとなって購入に進むような場合は、MSDN ライブラリの ASP.NET プロファイル プロパティのユーザー ID の例に示すように Global.asax の Profile_OnMigrateAnonymous イベントハンドラで処置するのが適当かもしれません。

Tags: ,

ASP.NET

About this blog

2010年5月にこのブログを立ち上げました。主に ASP.NET Web アプリ関係の記事です。

Calendar

<<  2024年3月  >>
252627282912
3456789
10111213141516
17181920212223
24252627282930
31123456

View posts in large calendar