喜帳面の日記

50歳越えおやじのASP.NET MVC への挑戦日記です。

Visual Studio Express 2012 for Web でいってみる 23.OAuth/OpenId認証(その2)

MVC4標準のOAuth + SQLServerの場合、照合順序が[Japanese_90_BIN2]だと問題が発生すると思われます。
 
 
今回は、MVC4のテンプレート内のOAuth/OpenId認証を使用する際の注意事項についてメモ書きをのこしときます。
尚、初心者が行き当たりばったりにいろいろ動かしてみたときのメモなので、記載内容には勝手な解釈や誤りもあるかと思います。お気づきの点がありましたら、ご指摘よろしくお願いします。
さて、以前の記事
Visual Studio Express 2012 for Web でいってみる 8.OAuth/OpenId認証(その1)
ここで、MVC4のテンプレート内のOAuth/OpenId認証にチャレンジして、何とかうまくいっている感じだったのですが、その後、登録された外部認証を削除する機能がうまく動作しない現象に遭遇しました。
原因は、SQLServer Databaseの照合順序にあるようです。
私の環境では、SQLServer Databaseの照合順序をバイナリ順の、[Japanese_90_BIN2]にしていました。文字列の比較やソートにこの照合順序が適用されるわけです。
具体的にはそんな環境で、
ローカルユーザーの新規登録を行った後
Manageページの外部ログインサービスの追加で、例えばTwitterを使ってログインを登録します。
この時点で[webpages_OAuthMembership]に紐付けレコードが追加されます。
Twitterを使ってログインも正常に機能します。
次に、同じくManageページで今度は、登録されている外部ログインからTwitterを削除します。そうすると[AccountController]メソッド[Disassociate]内の
 
OAuthWebSecurity.DeleteAccount(provider, providerUserId);
 
この行でエラーになります。
メッセージは「プロバイダーで不明なエラーが発生しました。

f:id:SannomiyaNotes:20130214133626p:plain

関連するテーブルの照合順序を[Japanese_CI_AS]で再作成することによってこのエラーを回避することができました。

照合順序がバイナリ系だとこのエラーが出るのか、[Japanese_90_BIN2]の場合のみでるのか?等の詳細な調査はできていません。

登録はできるのに削除はできないという現象でバグか?って気がしないでもないですが照合順序には注意しましょう。

私の場合は、データベースごと再作成することになりました。

今回は以上です。