トークンを設定するための
php メソッド: 1. トークンを取得するためのルーティング パスを定義します; 2. サービス層を確立します; 3. UserToken クラスを使用してロジック全体を処理します; 4. ユーザー クラスをモデル層; 5. 検証 ハンドラクラスと例外クラスに、対応する検証メソッドと例外ハンドリングを作成します。
推奨: 「PHP ビデオ チュートリアル 」
PHP_Set Permission Token Token
私たちが開発するバックエンド API インターフェースには訪問者に対する権限要件があります。たとえば、個人情報を含む一部のインターフェースでは、インターフェースをリクエストする際に、訪問者に事前に発行されたトークンを渡す必要があります。
これはトークンのようなもので、訪問者がそれを示した場合にのみ「通過」します。
以下は、アクセス許可トークンのコード作成のアイデアの記録です。
トークンを取得するためのルーティング パスを定義し、コード パラメーターを受け入れます (コード ソース: WeChat サーバー、ログイン システムのベース) WeChat システム上)
Service レイヤーを確立し、このレイヤーに Token 基本クラスと UserToken クラスを作成します
Route::post( 'api/:version/token/user', 'api/:version.Token/getToken' );次に、トークン コントローラーを作成し、対応するルートを定義します。パスの getToken メソッド:
public function getToken($code='') { (new TokenGet())->goCheck($code); // 验证器 $token = (new UserToken($code))->get(); return [ 'token' => $token ]; }サービス層を呼び出す前に、渡されたパラメーターを確認する必要があるため、TokenGet を定義します。バリデータ:
class TokenGet extends BaseValidate { protected $rule = [ 'code' => 'require|isNotEmpty' ]; protected $message = [ 'code' => '需要code才能获得Token!' ]; }トークン コントローラーに戻り、検証に合格した後、サービス層によって定義された UserToken クラスを呼び出します。
$token = (new UserToken($code))->get();复制代码ここでは、サービス層とモデル層について説明します。私たちの一般的な理解は、サービス層はモデル層に基づいた抽象的なカプセル化であるということです。
function __construct($code) { $this->code = $code; $this->wxAppID = config('wx.app_id'); $this->wxAppSecret = config('wx.app_secret'); $this->wxLoginUrl = sprintf( config('wx.login_url'), $this->wxAppID, $this->wxAppSecret, $this->code ); }次に、これらを入力します。 WeChat によって提供されるインターフェイスのパラメーター位置の目的は、完全な WeChat サーバー側 URL を取得し、必要な openid を要求することです。 その後、ネットワーク要求を送信するステップはここではスキップされます。 WeChat サーバーは、openid を含むオブジェクトを返します。このオブジェクトの値が OK であると判断した後、トークンを生成するステップを開始します。関数 GrantToken() を作成します:
private function grantToken($openidObj) { // 取出openid $openid = $openidObj['openid']; // 通过Model层调用数据库,检查openid是否已经存在 $user = UserModel::getByOpenID($openid); // 如果存在,不处理,反之则新增一条user记录 if ($user) { $uid = $user->id; } else { // 不存在,生成一条数据,具体方法略过 $uid = $this->newUser($openid); } // 生成令牌,写入缓存(具体方法见下面的定义) $cachedValue = $this->prepareCacheValue($openidObj, $uid); $token = $this->saveToCache($cachedValue); // 令牌返回到调用者端 return $token; } private function prepareCacheValue($openidObj, $uid) { $cachedValue = $openidObj; $cachedValue['uid'] = $uid; $cachedValue['scope'] = 16; // 权限值,自己定义 return $cachedValue; } private function saveToCache($cachedValue) { $key = self::generateToken(); // 生成令牌的方法 $value = json_encode($cachedValue); $tokenExpire = config('setting.token_expire'); // 设定的过期时间 $request = cache($key, $value, $tokenExpire); if (!$request) { throw new TokenException([ 'msg' => '服务器缓存异常', 'errorCode' => 10005 ]); } return $key; // 返回令牌:token }ご覧のとおり、コアプロセスは次のとおりです: ##openid を取得します
このメソッドは次のように詳細に定義されています。 <pre class="brush:js;toolbar:false">public static function generateToken() {
$randomChars = getRandomChars(32); // 32个字符组成一组随机字符串
$timestamp = $_SERVER[&#39;REQUEST_TIME_FLOAT&#39;];
$salt = config(&#39;security.token_salt&#39;); // salt 盐
// 拼接三组字符串,进行MD5加密,然后返回
return md5($randomChars.$timestamp.$salt);
}
function getRandomChars($length) {
$str = null;
$strPoll = &#39;abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789&#39;;
$max = strlen($strPoll) - 1;
for ($i = 0; $i < $length; $i++) {
$str .= $strPoll[rand(0, $max)];
}
return $str;
}</pre>
その主な機能は間違いなく、必要なトークン (トークン文字列) を生成することです。
は他のタイプのトークンでも使用されるため、Token 基本クラスに配置されることに注意してください。 この時点で必要なのは、生成されたトークンをコントローラーに返すことだけです。
3. 概要
メソッドに示されているように、これはすべてのプロセスを含むコア メソッドですが、別の特定のプロセスが他のメソッドで定義されてから grantToken()# に提供されます。 #メソッド呼び出し。
これを実行した後、
grantToken()
以上がPHPでパーミッショントークンを設定する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。