トークンを設定するための
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' );
public function getToken($code='') { (new TokenGet())->goCheck($code); // 验证器 $token = (new UserToken($code))->get(); return [ 'token' => $token ]; }
class TokenGet extends BaseValidate { protected $rule = [ 'code' => 'require|isNotEmpty' ]; protected $message = [ 'code' => '需要code才能获得Token!' ]; }
$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 ); }
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 }
このメソッドは次のように詳細に定義されています。 <div class="code" style="position:relative; padding:0px; margin:0px;"><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><div class="contentsignin">ログイン後にコピー</div></div> その主な機能は間違いなく、必要なトークン (トークン文字列) を生成することです。 </p>generateToken()<p> は他のタイプのトークンでも使用されるため、Token 基本クラスに配置されることに注意してください。 <code>
この時点で必要なのは、生成されたトークンをコントローラーに返すことだけです。
3. 概要
メソッドに示されているように、これはすべてのプロセスを含むコア メソッドですが、別の特定のプロセスが他のメソッドで定義されてから grantToken()# に提供されます。 #メソッド呼び出し。
これを実行した後、
grantToken()
以上がPHPでパーミッショントークンを設定する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。