2012-02-29 2 views
2

私はyiiフレームワークを使用していて、別のユーザーアカウントを持っています。ユーザー4のビューページを見たいときは、のようなURLを入力する必要があります。更新するにはwww.mydomain.com/user/update/4があります。yiiフレームワークを使用してURLからuser_idを隠すにはどうすればよいですか?

URL行からユーザーIDを隠す方法はありますか?

www.mydomain.com/user/usernamewww.mydomain.com/user/update/usernameのようなルートを設定するにはどうすればよいですか?ルートを変更する必要がありますか?

usernameに@記号が含まれている場合はどうなりますか?

答えて

5

各ユーザーが一意のユーザー名を持っている場合、あなたはconfig/mainでこのカスタムルーティングルールを置くことによって、自分のユーザIDを示していないルート記述することができます。

'urlManager' => array(
    'rules' => array(
     'user/<username:\S+>' => 'users/view', 
    ) 
) 

\S+受け入れるべきを「@」。

public function actionView($username) {...} 

代わりのwww.mydomain.com/user/update/username私はwww.mydomain.com/user/<username>/updateを使用し、上記urlManager規則配列でこれを置く:UsersController

'user/<username:\S+>/update' => 'users/update', 

と、この:

public function actionUpdate($username) {...} 
そして、そのよう controllers/UsersControllerにそのユーザ名を渡します

作成する前にユーザーごとに一意の乱数を生成し、その番号に基づいてルーティングすることもできます。

+0

あなたは両方のルールを使用しますか? 'user/' => 'users/view'、 'user//update' => 'users/update'、 つまり、アクションごとに1つのルール? 2番目のルールは本当にユーザー名を隠していますか? www.mydomain.com/user//update – confile

+0

私はあなたがカスタムルーティングをしたい場合は両方のルールが必要だと思います。 1に結合するには巧妙な方法があるかもしれませんが、わかりません。 (カスタムルートでYiiのパフォーマンスが遅くなります) 2番目のルールの入力ミスです。 2番目のルールのURLはユーザー名を非表示にしません。 'www.mydomain.com/user/ /update' –

0

私はあなたのIDを渡す前に暗号化する方がよいと思います。そしてあなたがそこに達するとそれを解読する。そのようなランダム/ encrptedのIDを生成する多くの方法があります。セキュリティを強化するために、「ユーザー」のような名前を付けてはいけません。それを修正してみてください。あなたはポイントを持っていることを願っています... :)

+0

あなたはそのような暗号化されたIDの例を挙げることができますか? – confile

+0

ここにいくつかの例があります=> [リンク](http://php.net/manual/en/function.crypt.php)。また、プロジェクトのモデルで独自の暗号化機能を作成することもできます。 – neil

関連する問題