4

私はWeb API (2)プロジェクトを構築して使用しています"individual account" authentication。したい

  1. いくつかの詳細(名/姓など)でユーザーを拡張します (in model)
  2. ログイン後にその情報を取得します(クライアント側-私の場合はWindows Phone)

勉強MVCを始めたばかりなWeb APIので、誰か助けてくれませんか?

少し説明させてください: webapi プロジェクトを作成し、認証方法として「個人アカウント」を選択しました。FirstName と LastName の 2 つのフィールドを持つ Person というモデル クラスを追加しました。さて、フィドラーを使用して、「johndoe」というユーザーをパスワードで登録しました。この後、フィドラーを使用して「サーバー:ポート/トークン」でこのユーザーを認証し、ベアラートークンを取得しました。ここで問題があります。このユーザー クラスをモデルの Person クラスに関連付ける方法を知る必要があります。次に、コントローラーの書き方がわからないため、いつ get 要求を送信すると、コントローラー関数は関連付けられた Person を返します。

4

1 に答える 1

11

まず、次のように: ASP.NET Identity の概要

既定では、ASP.NET ID システムはすべてのユーザー情報をデータベースに格納します。ASP.NET Identity は、Entity Framework Code First を使用して、すべての永続化メカニズムを実装します。

これで、IdentityUser クラスがデータベースの AspNetUsers テーブルにマップされるので、それを継承する新しいクラスを作成して拡張し、カスタム プロパティを追加します。

public class CustomUser : IdentityUser
{
    public string Email { get; set; }
}

次に、UserManager クラスで IdentityUser クラスの代わりに CustomUser を使用できるようにする必要があるため、Startup.cs で、UserManager と UserStore のジェネリック型を次のように変更します。

UserManagerFactory = () => new UserManager<CustomUser>(new UserStore<CustomUser>());

また、プロパティ:

public static Func<UserManager<CustomUser>> UserManagerFactory { get; set; }

ApplicationOAuthProvider.cs およびソリューション内の任意の場所で、 UserManager のジェネリック型に対して同じ変更を行い、 IdentityUser の代わりに CustomUser の使用を開始します。次のように、新しい「Email」プロパティを RegisterBindingModel に追加できます。

public class RegisterBindingModel
{
    [Required]
    [Display(Name = "User name")]
    public string UserName { get; set; }

    [Required]
    [StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)]
    [DataType(DataType.Password)]
    [Display(Name = "Password")]
    public string Password { get; set; }

    [DataType(DataType.Password)]
    [Display(Name = "Confirm password")]
    [Compare("Password", ErrorMessage = "The password and confirmation password do not match.")]
    public string ConfirmPassword { get; set; }

    public string Email { get; set; }
}

次に、登録時に値を追加できます。

 CustomUser user = new CustomUser
        {
            UserName = model.UserName,
            Email=model.Email
        };

それが役立つことを願っています

アップデート

「列名 'Discriminator' が無効です。」という ExceptionMessage が表示された場合。つまり、「AspNetUsers」は私の手順に従う前に既に作成されており、テーブルには「Discriminator」列がないため、データベースに移動し、タイプの新しい列を追加して AspNetUsers テーブルのデザインを変更するだけです。 nvarchar(128) として (私の例では Email のように必要な新しい列も追加します)、 Discriminator という名前を付けます。古いレコードのこの列のフィールドに適切な値を入力することを忘れないでください (私の例ではたとえば、CustomUser になります)。

于 2013-11-29T18:55:13.850 に答える